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使用相关推荐

  1. FutureTask中Treiber堆的实现

    2019独角兽企业重金招聘Python工程师标准>>> 在文章FutureTask源码分析中简单说明了FutureTask中使用Treiber堆栈来保存等待结果的线程,本文将详细分析 ...

  2. 线上接口经常超时,我用线程池+ FutureTask解决了,YYDS

    欢迎关注方志朋的博客,回复"666"获面试宝典 之前红包权益领取查询的接口超时了,因为有用户订购的权益有点多 解决方案 用线程池+ FutureTask将1个查询拆分成多个小查询 ...

  3. 一次搞懂 Runnable、Callable、Future、FutureTask,不懂不要钱!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 一般创建线程只有两种方式,一种是继承Thread,一种是实 ...

  4. FutureTask demo

    package com.xinwei.order.entity;import java.util.concurrent.ExecutorService; import java.util.concur ...

  5. futuretask使用_JDK源码分析-FutureTask

    1. 概述 FutureTask 是一个可取消的.异步执行任务的类,它的继承结构如下: 它实现了 RunnableFuture 接口,而该接口又继承了 Runnable 接口和 Future 接口,因 ...

  6. Callable、Future和FutureTask

    2019独角兽企业重金招聘Python工程师标准>>> 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任 ...

  7. FutureTask 实现预加载数据 在线看电子书、浏览器浏览网页等

    FutureTask 有点类似Runnable,都可以通过Thread来启动,不过FutureTask可以返回执行完毕的数据,并且FutureTask的get方法支持阻塞. 由于:FutureTask ...

  8. 接口经常超时?线程池+ FutureTask来解决!

    之前红包权益领取查询的接口超时了,因为有用户订购的权益有点多 解决方案 用线程池+ FutureTask将1个查询拆分成多个小查询 选择FutureTask是因为它具有仅执行1次run()方法的特性( ...

  9. Java--FutureTask原理与使用(FutureTask可以被Thread执行,可以被线程池submit方法执行,并且可以监控线程与获取返回值)...

    package com;import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; im ...

  10. JAVA并发编程学习笔记------FutureTask

    FutureTask是Future和Callable的结合体.传统的代码是这样写的 Future f = executor.submit(new Callable()); 然后通过Future来取得计 ...

最新文章

  1. 解决scrapy安装失败
  2. 设计模式入门:建造者模式
  3. 创建试图 失败_导致微服务失败的 11 个原因
  4. 一种关于感受野尺寸计算的思路
  5. 中国国际智能产业博览会-2018-08-23至25 重庆国际博览中心举行
  6. How to solve C library not available dtaidistance
  7. .NET7的七项重大改进!
  8. 【Python】Python里的复数运算
  9. JAVA--位移运算符详细分析【转载】
  10. python可以读取excel文档吗_python打开excel文件【python读取excel文件如何进行】
  11. NOAA GSOD数据中 国家与地区缩写对应全称
  12. kafka集群搭建(三台服务器)
  13. 安卓动画入门教程 Animation in Android(1)
  14. 2013下学期c语言作业,2013年计算机二级C语言模拟试题三及答案
  15. devc++ value of xxx too large for field of 4 bytes at xxx 并且源文件未编译
  16. linux系统安装hba驱动,Linux系统上iSCSI HBA的安装和配置
  17. 程序员的数学书籍(C C++篇)
  18. mvc5 ef mysql_ASP.NET MVC快速入门之数据库操作(MVC5+EF6)[第一篇][上] | Rickytsang洛水寒...
  19. 模拟鼠标键盘html,模拟按键操作神器(鼠标键盘模拟操作助手)V2.0.2.1 正式版
  20. android 打开其它app,Android APP打开另一个APP的几种实现总结

热门文章

  1. linux下的权限问题
  2. 读《白帽子讲Web安全》之安全意识篇(一)
  3. 上不了网,我的解决过程
  4. Visual Studio 2008 中使用插件Extjs提示的方法
  5. 爬虫IP被禁的简单解决方法
  6. 0b3398php,思想道德修养与法律基础(九江职业技术学院)知到2020题目及答案
  7. MySQL 使用 OR 条件导致索引失效
  8. python算法与数据结构-归并排序算法
  9. 为什么kafka使用磁盘而不是内存
  10. Loadrunner基础:Loadrunner Vuser基本概念和应用