FutureTask是Future和Callable的结合体。传统的代码是这样写的
Future f = executor.submit(new Callable());

然后通过Future来取得计算结果。但是,若开启了多个任务,我们无从知晓哪个任务最先结束,因此,若要实现“当某任务结束时,立刻做一些事情,例如记录日志”这一功能,就需要写一些额外的代码。FutureTask正是为此而存在,他有一个回调函数protected void done(),当任务结束时,该回调函数会被触发。因此,只需重载该函数,即可实现在线程刚结束时就做一些事情。实例如下:

public class FutureTaskTest {public static void main(String[] args) {ExecutorService service = Executors.newCachedThreadPool();for(int i=0;i<10;i++){Callable<String> c = new Task();MyFutureTask ft = new MyFutureTask(c);service.submit(ft);}}static class MyFutureTask extends FutureTask<String>{public MyFutureTask(Callable<String> callable) {super(callable);}protected void done(){try {System.out.println(get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}}static class Task implements Callable<String> {@Overridepublic String call() throws Exception {TimeUnit.SECONDS.sleep(new Random().nextInt(12));return Thread.currentThread().getName();}}
}

注:
Callable 和 Runnable 的使用方法大同小异, 区别在于: 
1.Callable 使用 call() 方法, Runnable 使用 run() 方法 
2.call() 可以返回值, 而 run()方法不能返回。 
3.call() 可以抛出受检查的异常,比如ClassNotFoundException, 而run()不能抛出受检查的异常。

转自:http://blog.csdn.net/andycpp/article/details/8902655

转载于:https://www.cnblogs.com/hunterCecil/p/6076554.html

JAVA并发编程学习笔记------FutureTask相关推荐

  1. 【并发入门】Java 并发编程学习笔记

    注:该笔记主要记录自 B站 up主 遇见狂神说的个人空间_哔哩哔哩_bilibili 1.什么是 JUC Java 工具类中的 并发编程包 学习:源码 + 官方文档 业务:普通的线程代码 Thread ...

  2. JAVA并发编程学习笔记之CAS操作

    http://blog.csdn.net/aesop_wubo/article/details/7537960 CAS操作 CAS是单词compare and set的缩写,意思是指在set之前先比较 ...

  3. Java并发编程学习笔记(二)多线程的理解及多线程的优点

    多线程的优点 原文:http://tutorials.jenkov.com/java-concurrency/benefits.html 作者:Jakob Jenkov        翻译:古圣昌   ...

  4. Java并发编程学习笔记——volatile与synchronized关键字原理及使用

    Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令. 一.vo ...

  5. java 网络编程学习笔记

    java 网络编程学习笔记 C/S模式:客户端和服务器 客户端创建流程 1 1.建立Socket端点 2 3 Socket s = new Socket(绑定地址, 绑定端口); 2.确认源数据方式和 ...

  6. JAVA并发编程实践笔记

    2019独角兽企业重金招聘Python工程师标准>>> JAVA并发编程实践笔记 博客分类: java JAVA并发编程实践笔记 1, 保证线程安全的三种方法:     a, 不要跨 ...

  7. java并发编程学习一

    java并发编程学习一 什么是进程和线程? 进程是操作系统进行资源分配的最小单位 进程跟进程之间的资源是隔离的,同一个进程之中的线程可以共享进程的资源. 线程是进程的一个实体,是CPU 调度和分派的基 ...

  8. java并行任务,Java 并发编程学习(五):批量并行执行任务的两种方式

    Java 并发编程学习(五):批量并行执行任务的两种方式 背景介绍 有时候我们需要执行一批相似的任务,并且要求这些任务能够并行执行.通常,我们的需求会分为两种情况: 并行执行一批任务,等待耗时最长的任 ...

  9. Java并发编程学习 + 原理分析(建议收藏)

    总结不易,如果对你有帮助,请点赞关注支持一下 微信搜索程序dunk,关注公众号,获取博客源码 Doug Lea是一个无私的人,他深知分享知识和分享苹果是不一样的,苹果会越分越少,而自己的知识并不会因为 ...

最新文章

  1. 火焰图(Flame Graphs)的安装和基本用法
  2. Python StringIO实现内存缓冲区中读写数据
  3. 【半译】两个gRPC的C#库:grpc-dotnet vs Grpc.Core
  4. python求一组数的最大值_python快速求一个数组的最大值/最小值及其索引
  5. 2020年2月数据库流行度排行:冬日虽然寒冷,春光必定灿烂
  6. 当红开发语言Go,真的是未来的技术主流吗?
  7. Uva 1471 Defense Lines(LIS变形)
  8. 四大障碍将阻止或减缓广电发展宽带业务
  9. 英语语法:词法之动名词
  10. CC2530+74HC164矩阵键盘的设计
  11. js校验统一社会信用代码的合法性GB 32100-2015
  12. 英特尔芯片组发展史简介
  13. STL之vector的push_back过程详解
  14. 房价――你欠中国老百姓一次彻底的崩盘!
  15. ThreadPoolExecutor参数解析
  16. 19-10-15(msgbox、inputbox、注释)
  17. 写给Krpano小白们的最最最入门级教程(一)
  18. 比较详细的HC-SR04超声波传感器数据及机器人避障的应用方法
  19. 遇到“服务器内部错误http500怎么办?
  20. 操作系统LAB1实验报告

热门文章

  1. IPC$概念及入侵方式研究
  2. 【MYSQL】常用命令备忘录
  3. Hazelcast介绍与使用
  4. c/c++中typedef详解(此文对typedef用于结构体的定义说明得很清楚到位)
  5. 怎么看台式计算机是几位的,怎么查看自己电脑型号
  6. 如何在代码中让按钮高亮_如何在C代码中插入移位寄存器
  7. 怎么去除标题_未来健康家:怎么快速祛除甲醛
  8. git查找两个分支的共同节点
  9. 网络传输大端序_基于大端法、小端法以及网络字节序的深入理解
  10. python测试用例管理工具_三款开源测试管理工具推荐