第六章JavaFutureTask示例|
来源:网络
编辑:浣月
时间:2022-06-19
在本教程中,我们将看到有关 Java FutureTask 的示例。 FutureTask 类已在 JDK 5 中与 Executor Framework 一起引入。FutureTask
类是Future对象的具体实现,提供了启动和取消任务的方法,也提供了查看计算是否完成的方法。我们可以查询 FutureTask 对象并获取计算结果。 如果我们在 FutureTask 对象上调用 get 方法,它是阻塞调用,一旦计算完成就返回。 让我们通过这个例子来了解更多。
Java FutureTask 示例:
我们创建一个非常简单的示例。
步骤 1:创建一个名为MultiplyingTask.java
.
package org.arpit.java2blog;
import java.util.concurrent.Callable;
public class MultiplyingTask implements Callable{
int a;
int b;
long sleepTime;
public MultiplyingTask(int a, int b, long sleepTime) {
this.a=a;
this.b=b;
this.sleepTime=sleepTime;
}
@Override
public Integer call() throws Exception {
Thread.sleep(sleepTime);
return a*b;
}
}
第 2 步:创建一个名为FutureTaskMain
. 这将是我们的主要课程。
package org.arpit.java2blog;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
public class FutureTaskMain {
public static void main(String[] args) {
MultiplyingTask multiplyingTask1= new MultiplyingTask(10,20,2000l);
MultiplyingTask multiplyingTask2= new MultiplyingTask(20,40,4000l);
FutureTask<Integer> futureTask1=new FutureTask<>(multiplyingTask1);
FutureTask<Integer> futureTask2=new FutureTask<>(multiplyingTask2);
ExecutorService executor = Executors.newFixedThreadPool(2);
executor.execute(futureTask1);
executor.execute(futureTask2);
while(true)
{
try {
if(!futureTask1.isDone())
{
System.out.println("FutureTask1 output="+futureTask1.get());
}
if(!futureTask2.isDone())
{
System.out.println("Waitng for futureTask2 for completion");
System.out.println("FutureTask2 output="+futureTask2.get());
}
if(futureTask1.isDone() && futureTask2.isDone())
{
System.out.println("Completed both the FutureTasks, shutting down the executors");
executor.shutdown();
return;
}
}
catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
}
让我们运行上面的程序来检查输出:
FutureTask1 output=200
Waitng for futureTask2 for completion
FutureTask2 output=800
Completed both the future task, shutting down the executors
解释:
- 创建两个名为 multiplyingTask1 和 multiplyingTask2 的可调用任务。请注意,我们为 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 FutureTask 示例的全部内容。
相关文章:
- [其它]第六章JavaScheduledThreadPoolExecutor示例|
- [其它]第六章使用Callable和Future的JavaExecutorService示例|
- [其它]第六章JavanewCachedThreadPool示例|
- [其它]第六章JavanewFixedThreadPool示例|
- [其它]第六章:为什么我们需要Executor框架?|
- [其它]第五章在java中使用3个线程打印序列|
- [其它]第五章java中notify和notifyAll的区别|
- [其它]第五章我们可以在java中启动一个线程两次吗|
- [其它]第五章java中的对象级锁定与类级锁定|
- [其它]第五章Java线程连接示例|
相关推荐:
- [其它]第三章java中的抽象类|
- [其它]第四章java中的TreeMap与示例|
- [其它]第四章java中的hashcode()和equals()方法|
- [其它]第六章JavaFutureTask示例|
- [其它]计算机组成原理PDF扫描格式电子版百度云网盘下载
- [其它]程序设计语言概念(第9版)[Robert W. Sebesta]pdf格式电子版百度云网盘下载[53.8M]
- [其它]程序员必读之软件架构[Simon Brown]pdf格式电子版百度云网盘下载[41.6M]
- [其它]程序员的思维修炼 开发认知潜能的九堂课[Andy Hunt]pdf格式电子版百度云网盘下载
- [其它]程序员的职业素养[Robert C. Martin]pdf格式电子版百度云网盘下载[21.6M]
- [其它]程序员教程(第3版)[张淑平]pdf格式电子版百度云网盘下载[136.5M]
栏目分类
最新文章
热门文章
- 计算机组成原理PDF扫描格式电子版百度云网盘下载
- 硅谷之谜[吴军]pdf格式电子版百度云网盘下载[59.5M]
- 自选基金助手,一款Chrome扩展程序
- 七周七语言 理解多种编程范型[Bruce A. Tate]pdf格式电子版百度云网盘下载[9M]
- 系统集成项目管理工程师考试考眼分析与样卷解析(2014版)[软考新大纲研究组]
- 程序员面试金典(第5版)[Gayle Laakmann McDowell]pdf格式电子版百度云网盘下载[81.5M]
- 创业维艰 如何完成比难更难的事[Ben Horowitz]pdf格式电子版百度云网盘下载[65.3
- 程序员的思维修炼 开发认知潜能的九堂课[Andy Hunt]pdf格式电子版百度云网盘下载
- 图灵的秘密 他的生平、思想及论文解读[Charles Petzold]pdf格式电子版百度云网盘下
- OCP OCA认证考试指南全册:Oracle Database 11g(1Z0-051、1Z0-052、1Z0-053)[John Watson]pdf格式