FutureTask使用
FutureTask使用
FutureTask介绍
FutureTask 表示一个异步运算的任务。FutureTask 里面可以传入一个 Callable 的具体实现类,可以对这个异步运算的任务的结果进行等待获取、判断是否已经完成、取消任务等操作。
FutureTask实现接口
FutureTask实现了RunnableFuture接口,而接口RunnableFuture继承了Runnable, Future。
public class FutureTask<V> implements RunnableFuture<V>
public interface RunnableFuture<V> extends Runnable, Future<V>
FutureTask构造函数
FutureTask有两个构造函数,分别可以接受Callable和Runnable的实现类。
public FutureTask(Callable<V> callable) {if (callable == null)throw new NullPointerException();this.callable = callable;this.state = NEW; // ensure visibility of callable
}public FutureTask(Runnable runnable, V result) {this.callable = Executors.callable(runnable, result);this.state = NEW; // ensure visibility of callable
}
FutureTask的使用
因为FutureTask实现了RunnableFuture接口,而接口RunnableFuture继承了Runnable。所以可以使用Thread来start(),也可以使用线程池executor.execute()和executorService.submit()
又因为接口RunnableFuture继承了 Future接口,我们可以通过FutureTask来获取线程执行的结果。
public static void main(String[] args) {//创建一个FutureTaskFutureTask futureTask = new FutureTask(new Callable() {@Overridepublic Object call() throws Exception {System.out.println("执行call,并返回数值");return 5;}});//用线程池//Executor executor = Executors.newCachedThreadPool();//ExecutorService pool = Executors.newFixedThreadPool(5);//executor.execute(futureTask);//pool.submit(futureTask);//创建ThreadThread thread = new Thread(futureTask);//启动线程thread.start();try {Integer result = (Integer) futureTask.get();System.out.println("获得的线程执行结果:"+result);} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}
结果
执行call,并返回数值
获得的线程执行结果:5
FutureTask使用相关推荐
- FutureTask中Treiber堆的实现
2019独角兽企业重金招聘Python工程师标准>>> 在文章FutureTask源码分析中简单说明了FutureTask中使用Treiber堆栈来保存等待结果的线程,本文将详细分析 ...
- 线上接口经常超时,我用线程池+ FutureTask解决了,YYDS
欢迎关注方志朋的博客,回复"666"获面试宝典 之前红包权益领取查询的接口超时了,因为有用户订购的权益有点多 解决方案 用线程池+ FutureTask将1个查询拆分成多个小查询 ...
- 一次搞懂 Runnable、Callable、Future、FutureTask,不懂不要钱!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 一般创建线程只有两种方式,一种是继承Thread,一种是实 ...
- FutureTask demo
package com.xinwei.order.entity;import java.util.concurrent.ExecutorService; import java.util.concur ...
- futuretask使用_JDK源码分析-FutureTask
1. 概述 FutureTask 是一个可取消的.异步执行任务的类,它的继承结构如下: 它实现了 RunnableFuture 接口,而该接口又继承了 Runnable 接口和 Future 接口,因 ...
- Callable、Future和FutureTask
2019独角兽企业重金招聘Python工程师标准>>> 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任 ...
- FutureTask 实现预加载数据 在线看电子书、浏览器浏览网页等
FutureTask 有点类似Runnable,都可以通过Thread来启动,不过FutureTask可以返回执行完毕的数据,并且FutureTask的get方法支持阻塞. 由于:FutureTask ...
- 接口经常超时?线程池+ FutureTask来解决!
之前红包权益领取查询的接口超时了,因为有用户订购的权益有点多 解决方案 用线程池+ FutureTask将1个查询拆分成多个小查询 选择FutureTask是因为它具有仅执行1次run()方法的特性( ...
- Java--FutureTask原理与使用(FutureTask可以被Thread执行,可以被线程池submit方法执行,并且可以监控线程与获取返回值)...
package com;import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; im ...
- JAVA并发编程学习笔记------FutureTask
FutureTask是Future和Callable的结合体.传统的代码是这样写的 Future f = executor.submit(new Callable()); 然后通过Future来取得计 ...
最新文章
- 解决scrapy安装失败
- 设计模式入门:建造者模式
- 创建试图 失败_导致微服务失败的 11 个原因
- 一种关于感受野尺寸计算的思路
- 中国国际智能产业博览会-2018-08-23至25 重庆国际博览中心举行
- How to solve C library not available dtaidistance
- .NET7的七项重大改进!
- 【Python】Python里的复数运算
- JAVA--位移运算符详细分析【转载】
- python可以读取excel文档吗_python打开excel文件【python读取excel文件如何进行】
- NOAA GSOD数据中 国家与地区缩写对应全称
- kafka集群搭建(三台服务器)
- 安卓动画入门教程 Animation in Android(1)
- 2013下学期c语言作业,2013年计算机二级C语言模拟试题三及答案
- devc++ value of xxx too large for field of 4 bytes at xxx 并且源文件未编译
- linux系统安装hba驱动,Linux系统上iSCSI HBA的安装和配置
- 程序员的数学书籍(C C++篇)
- mvc5 ef mysql_ASP.NET MVC快速入门之数据库操作(MVC5+EF6)[第一篇][上] | Rickytsang洛水寒...
- 模拟鼠标键盘html,模拟按键操作神器(鼠标键盘模拟操作助手)V2.0.2.1 正式版
- android 打开其它app,Android APP打开另一个APP的几种实现总结