爪哇 未来任务示例

在本教程中,我们将看到有关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(); } } } } |
让’在上面的程序中运行以检查输出:
等待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 未来任务示例的所有内容。