java futuretask_Java FutureTask示例
Java Callable Future接口可用来获得线程的并发处理优势,以及它们能够为调用程序返回值。
FutureTask是Future接口的基本具体实现,并提供异步处理。它包含启动和取消任务的方法,以及可以返回FutureTask状态的方法,无论它是完成还是取消。需要一个可调用的对象来创建未来的任务,然后我们可以使用Java线程池执行器来异步处理它们。
下面来看一下使用简单的FutureTask示例程序。
由于FutureTask需要一个可调用的对象,将创建一个简单的Callable实现。
import java.util.concurrent.Callable;
public class MyCallable implements Callable {
private long waitTime;
public MyCallable(int timeInMillis){
this.waitTime=timeInMillis;
}
@Override
public String call() throws Exception {
Thread.sleep(waitTime);
//return the thread name executing this callable task
return Thread.currentThread().getName();
}
}
下面是FutureTask方法的一个示例,它显示了FutureTask的常用方法。
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class FutureTaskExample {
public static void main(String[] args) {
MyCallable callable1 = new MyCallable(1000);
MyCallable callable2 = new MyCallable(2000);
FutureTask futureTask1 = new FutureTask(callable1);
FutureTask futureTask2 = new FutureTask(callable2);
ExecutorService executor = Executors.newFixedThreadPool(2);
executor.execute(futureTask1);
executor.execute(futureTask2);
while (true) {
try {
if(futureTask1.isDone() && futureTask2.isDone()){
System.out.println("Done");
//shut down executor service
executor.shutdown();
return;
}
if(!futureTask1.isDone()){
//wait indefinitely for future task to complete
System.out.println("FutureTask1 output="+futureTask1.get());
}
System.out.println("Waiting for FutureTask2 to complete");
String s = futureTask2.get(200L, TimeUnit.MILLISECONDS);
if(s !=null){
System.out.println("FutureTask2 output="+s);
}
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}catch(TimeoutException e){
//do nothing
}
}
}
}
当运行上面的程序时,它不会打印任何东西,因为FutureTask的get()方法等待任务完成然后返回输出对象。还有一个重载方法也只等待指定的时间,我们将它用于futureTask2。还要注意使用isDone()方法确保程序在执行完所有任务后终止。
上述程序的输出将是:
FutureTask1 output=pool-1-thread-1
Waiting for FutureTask2 to complete
Waiting for FutureTask2 to complete
Waiting for FutureTask2 to complete
Waiting for FutureTask2 to complete
Waiting for FutureTask2 to complete
FutureTask2 output=pool-1-thread-2
Done
因此,FutureTask没有任何好处,但是当我们想要覆盖一些Future接口方法并且不想实现Future接口的每个方法时,它会派上用场。
¥ 我要打赏
纠错/补充
收藏
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。
java futuretask_Java FutureTask示例相关推荐
- Java FutureTask示例程序
有时我写了一篇有关Java Callable Future接口的文章,我们可以使用它来获得线程的并发处理优势,以及它们能够将值返回给调用程序. FutureTask是Future接口的基础具体实现,并 ...
- java python算法_用Python,Java和C ++示例解释的排序算法
java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...
- java web程序示例_想要建立一些有趣的东西吗? 这是示例Web应用程序创意的列表。...
java web程序示例 Interested in learning JavaScript? Get my ebook at jshandbook.com 有兴趣学习JavaScript吗? 在js ...
- Java版世界时钟示例
Java版世界时钟示例 这是一个Java版的世界时钟示例,移植自Gerrit创建的同名Swing应用(http://www.jug-muenster.de/swing-worldclock-427 ) ...
- java中FutureTask的使用
文章目录 FutureTask简介 Callable和Runnable的转换 以Runnable运行 java中FutureTask的使用 FutureTask简介 FutureTask是java 5 ...
- java 函数式编程 示例_功能Java示例 第8部分–更多纯函数
java 函数式编程 示例 这是第8部分,该系列的最后一部分称为"示例功能Java". 我在本系列的每个部分中开发的示例是某种"提要处理程序",用于处理文档. ...
- java 函数式编程 示例_功能Java示例 第1部分–从命令式到声明式
java 函数式编程 示例 功能编程(FP)的目的是避免重新分配变量,避免可变的数据结构,避免状态并全程支持函数. 如果将功能性技术应用于日常Java代码,我们可以从FP中学到什么? 在这个名为&qu ...
- java 静态缓存示例_Java 9 JShell示例:集合静态工厂方法
java 静态缓存示例 这篇文章继续从My My Java 9 Features博客文章中探索Java9功能. 在这里,我们在List,Set和Map接口中试验Java9 Collections静态工 ...
- java 根据类名示例化类_如何使用示例从Java中的类路径加载资源
java 根据类名示例化类 Java中的类路径不仅用于加载.class文件,而且还可以用于加载资源,例如属性文件,图像,图标,缩略图或任何二进制内容. Java提供了API来将这些资源读取为Input ...
最新文章
- 吴恩达Coursera机器学习 - Chapter 4 多变量线性回归
- 宝塔面板使用阿里云ssl证书
- 代码 控制unity 暂停 编辑器_Unity3D 报错解决方案及常用功能收集
- 清华出版社送书 50 本,倒计时!
- 【转】Memcached管理与监控工具----MemAdmin
- 笔试:当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? ?(2nd)...
- 手把手教你如何免费且光荣地使用专业版IntelliJ IDEA
- Linux服务器安全防护十个方面
- c语言洗牌发牌结构体,C语言程序设计课程设计多功能计算器、洗牌发牌、学生文件处理、链表处理.doc...
- 神秘的中国超级计算机:比肩高铁的世界级领先
- C++类成员属性的一种简洁实现
- sql之stuff函数学习笔记
- qt银行排队系统服务器代码,QT银行叫号排队系统
- c语言注释部分两侧的分界符号分别是,单片机C语言练习题
- VSCode如何返回上一步
- Toad oracle
- CentOS 识别NTFS格式U盘
- [ArcGIS] 空间分析(五) 网络分析
- Android工具类的整理
- 04_NetBean安裝
热门文章
- 前置机与虚拟服务器,前置机跟服务器的关系
- MyBatisPlus Service层的CRUD
- 论文翻译:2018_Speech Bandwidth Extension Using Generative Adversarial Networks
- gta python解指纹_python爬虫JS逆向:X咕视频密码与指纹加密分析
- 精通 Python OpenCV4:第三、四部分
- 银联无感支付自动缴费不停车快速离场
- 【智能扭矩系统】主机厂常见的紧固件扭矩质量的控制方法有哪些?
- 罗永浩 你的锤子呢?
- VScode 打不开浏览器,更改默认浏览器
- oracle删除表并释放空间,oracle删除(释放)数据文件/表空间流程