JAVA并发编程学习笔记------FutureTask
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相关推荐
- 【并发入门】Java 并发编程学习笔记
注:该笔记主要记录自 B站 up主 遇见狂神说的个人空间_哔哩哔哩_bilibili 1.什么是 JUC Java 工具类中的 并发编程包 学习:源码 + 官方文档 业务:普通的线程代码 Thread ...
- JAVA并发编程学习笔记之CAS操作
http://blog.csdn.net/aesop_wubo/article/details/7537960 CAS操作 CAS是单词compare and set的缩写,意思是指在set之前先比较 ...
- Java并发编程学习笔记(二)多线程的理解及多线程的优点
多线程的优点 原文:http://tutorials.jenkov.com/java-concurrency/benefits.html 作者:Jakob Jenkov 翻译:古圣昌 ...
- Java并发编程学习笔记——volatile与synchronized关键字原理及使用
Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令. 一.vo ...
- java 网络编程学习笔记
java 网络编程学习笔记 C/S模式:客户端和服务器 客户端创建流程 1 1.建立Socket端点 2 3 Socket s = new Socket(绑定地址, 绑定端口); 2.确认源数据方式和 ...
- JAVA并发编程实践笔记
2019独角兽企业重金招聘Python工程师标准>>> JAVA并发编程实践笔记 博客分类: java JAVA并发编程实践笔记 1, 保证线程安全的三种方法: a, 不要跨 ...
- java并发编程学习一
java并发编程学习一 什么是进程和线程? 进程是操作系统进行资源分配的最小单位 进程跟进程之间的资源是隔离的,同一个进程之中的线程可以共享进程的资源. 线程是进程的一个实体,是CPU 调度和分派的基 ...
- java并行任务,Java 并发编程学习(五):批量并行执行任务的两种方式
Java 并发编程学习(五):批量并行执行任务的两种方式 背景介绍 有时候我们需要执行一批相似的任务,并且要求这些任务能够并行执行.通常,我们的需求会分为两种情况: 并行执行一批任务,等待耗时最长的任 ...
- Java并发编程学习 + 原理分析(建议收藏)
总结不易,如果对你有帮助,请点赞关注支持一下 微信搜索程序dunk,关注公众号,获取博客源码 Doug Lea是一个无私的人,他深知分享知识和分享苹果是不一样的,苹果会越分越少,而自己的知识并不会因为 ...
最新文章
- 火焰图(Flame Graphs)的安装和基本用法
- Python StringIO实现内存缓冲区中读写数据
- 【半译】两个gRPC的C#库:grpc-dotnet vs Grpc.Core
- python求一组数的最大值_python快速求一个数组的最大值/最小值及其索引
- 2020年2月数据库流行度排行:冬日虽然寒冷,春光必定灿烂
- 当红开发语言Go,真的是未来的技术主流吗?
- Uva 1471 Defense Lines(LIS变形)
- 四大障碍将阻止或减缓广电发展宽带业务
- 英语语法:词法之动名词
- CC2530+74HC164矩阵键盘的设计
- js校验统一社会信用代码的合法性GB 32100-2015
- 英特尔芯片组发展史简介
- STL之vector的push_back过程详解
- 房价――你欠中国老百姓一次彻底的崩盘!
- ThreadPoolExecutor参数解析
- 19-10-15(msgbox、inputbox、注释)
- 写给Krpano小白们的最最最入门级教程(一)
- 比较详细的HC-SR04超声波传感器数据及机器人避障的应用方法
- 遇到“服务器内部错误http500怎么办?
- 操作系统LAB1实验报告
热门文章
- IPC$概念及入侵方式研究
- 【MYSQL】常用命令备忘录
- Hazelcast介绍与使用
- c/c++中typedef详解(此文对typedef用于结构体的定义说明得很清楚到位)
- 怎么看台式计算机是几位的,怎么查看自己电脑型号
- 如何在代码中让按钮高亮_如何在C代码中插入移位寄存器
- 怎么去除标题_未来健康家:怎么快速祛除甲醛
- git查找两个分支的共同节点
- 网络传输大端序_基于大端法、小端法以及网络字节序的深入理解
- python测试用例管理工具_三款开源测试管理工具推荐