FutureTask 类构造函数参数为 Callable 接口,实现 RunnableFuture 接口,而 RunnableFuture 接口继承了 Future 和 Runnable 接口,

所以它既是一个线程,也可以有返回结果。

使用栗子如下:

1)定义一个Callable 任务

public class CallableTask implements Callable<String> {private long sleepTime;public CallableTask(long sleepTime){this.sleepTime = sleepTime;}@Overridepublic String call() throws Exception {TimeUnit.SECONDS.sleep(sleepTime);return Thread.currentThread().getName();}}

2)定义线程池,执行 Callable 任务,使用 FutureTask 接收 Callable任务返回对象信息。

public class FutureTaskTest {public static void main(String[] args) {CallableTask callable1 = new CallableTask(3L);CallableTask callable2 = new CallableTask(5L);FutureTask<String> futureTask1 = new FutureTask<String>(callable1);FutureTask<String> futureTask2 = new FutureTask<String>(callable2);ExecutorService executor = Executors.newFixedThreadPool(2);executor.execute(futureTask1);executor.execute(futureTask2);while (true) {try {if (futureTask1.isDone() && futureTask2.isDone()){System.out.println("FutureTask1:" + futureTask1.get());System.out.println("FutureTask2:" + futureTask2.get());System.out.println("All FutureTasks are finished");executor.shutdown();return;}} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}}
}

Java 并发编程之 FutureTask相关推荐

  1. Java并发编程之FutureTask源码解析

    上次总结一下AQS的一些相关知识,这次总结了一下FutureTask的东西,相对于AQS来说简单好多呀 之前提到过一个LockSupport的工具类,也了解一下这个工具类的用法,这里也巩固一下吧 /* ...

  2. zbb20180929 thread java并发编程之Condition

    java并发编程之Condition 引言 在java中,对于任意一个java对象,它都拥有一组定义在java.lang.Object上监视器方法,包括wait(),wait(long timeout ...

  3. java并发编程之4——Java锁分解锁分段技术

    转载自 java并发编程之4--Java锁分解锁分段技术 并发编程的所有问题,最后都转换成了,"有状态bean"的状态的同步与互斥修改问题.而最后提出的解决"有状态bea ...

  4. Java 并发编程之美:并发编程高级篇之一-chat

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

  5. Java 并发编程之美:并发编程高级篇之一

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

  6. Java并发编程之CAS第三篇-CAS的缺点

    Java并发编程之CAS第三篇-CAS的缺点 通过前两篇的文章介绍,我们知道了CAS是什么以及查看源码了解CAS原理.那么在多线程并发环境中,的缺点是什么呢?这篇文章我们就来讨论讨论 本篇是<凯 ...

  7. Java并发编程之CyclicBarrier详解

    简介 栅栏类似于闭锁,它能阻塞一组线程直到某个事件的发生.栅栏与闭锁的关键区别在于,所有的线程必须同时到达栅栏位置,才能继续执行.闭锁用于等待事件,而栅栏用于等待其他线程. CyclicBarrier ...

  8. java并发编程之AbstractQueuedSynchronizer

    引言 AbstractQueuedSynchronizer,队列同步器,简称AQS,它是java并发用来构建锁或者其他同步组件的基础框架. 一般使用AQS的主要方式是继承,子类通过实现它提供的抽象方法 ...

  9. Java并发编程之synchronized关键字解析

    前言 公司加班太狠了,都没啥时间充电,这周终于结束了.这次整理了Java并发编程里面的synchronized关键字,又称为隐式锁,与JUC包中的Lock显示锁相对应:这个关键字从Java诞生开始就有 ...

最新文章

  1. Linux启动流程(二)
  2. 【VBA研究】查找目录以下全部文件的名称
  3. java基础----Java的格式化输出
  4. nginx反向代理、负载均衡以及分布式下的session保持
  5. Leetcode 124题:求⼆叉树中最⼤路径和
  6. mysql 修改库的校对集_mysql数据库的基本操作(增删改查、字符集、校对集)
  7. VisualStudio2010 SP1 SP1 SDK SQLServer 2008 SP3 下载地址
  8. SpringBoot2.1.5 (4)---SpringBoot 常用注解说明
  9. 【线程】——线程安全问题
  10. c语言中区别一般变量,C语言中,为了区别一般的变量,符号常量必须用
  11. XStream实现缓存
  12. 疯狂java讲义第六章课后习题答案
  13. 【零基础玩转BLDC系列】基于霍尔传感器的无刷直流电机控制原理
  14. Solaris10上修改hostid
  15. 矩阵快速幂求斐波那契数列 poj3070
  16. php怎么转mp4,php使用memcoder将视频转成mp4格式的方法
  17. RestTemplate使用实战-exchange方法讲解-HTTP请求
  18. 信息安全系统设计基础第十四周学习总结
  19. 看见·先行者 | 织音App率先接入即构在线KTV实时合唱解决方案
  20. python员工管理软件----列表初体验

热门文章

  1. 【英语学习】【医学】【化学】Chemistry: the Central Science (14e) 的目录
  2. Intel 64/x86_64/IA-32/x86处理器 - 指令格式(2) - 8086/16位指令格式概述
  3. Android OpenGLES2.0(十六)——3D模型贴图及光照处理(obj+mtl)
  4. c语言字 字符串转换成数组_C语言学习教程之详解C语言中的字符串数组
  5. 加快linux编译速度,Linux Makefile 编译速度的优化【转】
  6. python空集合_python空集合
  7. android api 打开慢,为什么下了android 4.1 的SDK后在本地用浏览器看api说明文档时,浏览器打开api的html文件很慢?试了好几款浏览器都一样。为什么?...
  8. 文艺编程 Literate Programming (原文中英文对照)
  9. 基于Keras的卷积神经网络(CNN)可视化
  10. Office 365新管理中心目录同步配置