爪哇 2博客
 爪哇 2博客

爪哇 未来任务示例

 爪哇  未来任务示例

在本教程中,我们将看到有关Java 未来任务示例的信息。
未来任务 类 has been 整型 roduced in JDK 5 with 执行器框架. 未来任务 类 is the concrete implementation of the 未来 对象,并提供用于启动和取消任务的方法。还提供用于查看计算是否完成的方法。我们可以查询FutureTask对象并获得计算结果。
如果我们对FutureTask对象调用get方法,则它将阻塞调用并在计算完成后返回。
让’通过示例进一步了解。

爪哇 未来任务示例:

让’创建一个非常简单的示例。

Step 1: Create a 可召回 task named 乘法任务.java.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
组织 . Arpit . 爪哇 2blog;
进口 爪哇 . 实用程序 .同时.可召回;
 
上市 乘法任务 实施 可召回{
     整型 a;
     整型 b;
     睡觉时间;
 
     上市 乘法任务( 整型 a, 整型 b, 睡觉时间) {
         这个 .a=a;
         这个 .b=b;
         这个 .睡觉时间=睡觉时间;
 
    }
 
    @覆写
     上市 整数 呼叫 () 抛出 例外 {
         线 . 睡觉 (睡觉时间);
         返回 一个* b;
    }
}
 

Step 2: Create a 类 named 未来任务Main. This will be our 主要 类 .

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
组织 . Arpit . 爪哇 2blog;
 
进口 爪哇 . 实用程序 .同时.ExecutionException;
进口 爪哇 . 实用程序 .同时.执行器服务;
进口 爪哇 . 实用程序 .同时.执行者;
进口 爪哇 . 实用程序 .同时.未来任务;
 
上市 未来任务Main {
 
     上市 静态的 虚空 主要 ([] args ) {
        乘法任务 乘法任务1= 乘法任务(10,20,2000l);
        乘法任务 plicatingTask2= 乘法任务(20,40,4000l);
 
        未来任务<整数 > futureTask1= 未来任务<>(乘法任务1);
        未来任务<整数 > futureTask2= 未来任务<>(plicatingTask2);
 
        执行器服务 执行者 = 执行者. 新 FixedThreadPool(2);
        执行者. 执行 (futureTask1);
        执行者. 执行 (futureTask2);
 
        ( 真正 )
        {
             尝试 {
                 如果 (!futureTask1. 已经完成了 ())
                {
                     系统 .. 打印 (“ 未来任务1输出=”+futureTask1. 得到 ());
                }
                 如果 (!futureTask2. 已经完成了 ())
                {
                     系统 .. 打印 (“等待futureTask2完成”);
                     系统 .. 打印 (“ 未来任务2输出=”+futureTask2. 得到 ());
                }
                 如果 (futureTask1. 已经完成了 () && futureTask2. 已经完成了 ())
                {
                     系统 .. 打印 (“完成了两个FutureTasks,关闭了执行程序”);
                    执行者.关掉();
                     返回 ;
                }
            }
             抓住 (InterruptedException e) {
                e.printStackTrace();
            } 抓住 (ExecutionException e) {
                e.printStackTrace();
            }
        }
 
    }
}
 

让’在上面的程序中运行以检查输出:

未来任务1输出= 200
等待futureTask2完成
未来任务2输出= 800
完成了两个将来的任务,关闭了执行程序

说明:

  • 创建两个名为multipleingTask1和multipleingTask2的可调用任务。请注意,我们给multiplyingTask1设置了2000的睡眠时间,给multiplyingTask2设置了4000的睡眠时间,因此multiplyingTask2会比multiplyingTask1花费更多的时间。
  • 通过分别传递multiplyingTask1和multiplyingTask2创建两个名为FutureTask1和futureTask2的FutureTask对象。
  • 用while(true)设置无限循环条件
  • !futureTask1.isDone()检查futureTask1的完成,如果尚未完成,我们调用futureTask1.get(),因为get方法阻塞了操作,当前线程将等待futureTask1完成。
  • futureTask1完成后,我们检查futureTask2.isDone(),然后对futureTask2重复以上步骤。
  • 一旦完成两个任务,即futureTask1和futureTask2,我们就在执行器上调用shutdown()方法并从中返回。

那’关于Java 未来任务示例的所有内容。


导入联系人

您可能还喜欢:

分享这个

作者

关注作者

相关文章

  • 获取Java中的线程ID
    9月30日

    获取Java中的线程ID

    在本文中,我们将学习获取Java中正在运行的线程的线程ID。 Id是在线程创建时生成的唯一正数。该ID在线程的生存期内保持不变。线程终止时,其ID可用于引用另一个线程,但是[…]

  •  爪哇 中的ArrayBlockingQueue
    9月19日

    爪哇 中的ArrayBlockingQueue

    在本文中,我们将了解Java并发队列BlockingQueue。然后我们将深入其中’其中之一的实现ArrayBlockingQueue。什么是BlockingQueue 阻塞队列接口是在Java 5中并发API下引入的,它表示一个线程安全的队列,可以在其中添加和删除元素。我们可以有 […]

  • 将Java程序延迟几秒钟
    12月11日

    将Java程序延迟几秒钟

    在这篇文章中,我们将看到如何将Java程序延迟几秒钟。在很多情况下,我们需要等待其他任务完成,因此我们需要延迟Java程序。有多种方法可以延迟Java程序的执行。使用Thread.sleep 睡觉 方法会使当前线程暂停[…]

  • 29 May

    如何使用Java中的线程打印偶数和奇数

    在本文中,我们将看到如何使用Java中的线程打印偶数和奇数。另请参见:如何在Java中使用3个线程打印序列问题您将获得两个线程。您需要使用一个线程打印奇数,而使用另一线程打印偶数。您需要以自然顺序打印[…]

  •  爪哇 中的wait(),notify()和notifyAll()
    10月22日

    为什么在对象类中使用wait(),notify()和notifyAll()方法

    在这篇文章中,我们将看到为什么wait(),notify()和notifyAll()方法在对象类中而不在线程类中。这是最常问到的Java多线程面试问题之一。您可能知道wait(),notify()和notifyAll()方法在Object类中,您知道相同的原因吗?让’s […]

  •  爪哇 中的自定义BlockingQueue
    10月16日

    爪哇 中的自定义BlockingQueue实现

    在本文中,我们将看到如何创建自己的自定义BlockingQueue。这是最常被问到的Java面试问题之一。您需要实现自己的BlockingQueue。这个问题有助于面试官对多线程概念有所了解。这是BlockingQueue的简单实现。我们将使用数组将元素存储在[…]

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

订阅我们的新闻

获取质量教程到您的收件箱。现在订阅。


让’s be Friends

©2020 爪哇 2博客