当前位置:网站首页>AQS Synchronization Component - FutureTask Analysis and Use Cases
AQS Synchronization Component - FutureTask Analysis and Use Cases
2022-08-09 13:02:00 【51CTO】
FutureTask原理
FutureTask间接实现了runnable接口和future接口,说明了futureTask是runnable与callnable的集合体,即是有返回值的runnable方法.因此,FutureTask可以交给Executor执行,也可以由调用线程直接执行(FutureTask.run()).
源码分析
构造函数
常用方法
根据FutureTask的run方法执行的时机,FutureTask可以处于以下三种执行状态:
- 未启动:在FutureTask.run()还没执行之前,FutureTask处于未启动状态.当创建一个FutureTask对象,并且run()方法未执行之前,FutureTask处于未启动状态.
- 已启动:FutureTask对象的run方法启动并执行的过程中,FutureTask处于已启动状态.
- 已完成:FutureTask正常执行结束,或者FutureTask执行被取消(FutureTask对象cancel方法),或者FutureTask对象run方法执行抛出异常而导致中断而结束,FutureTask都处于已完成状态.
- 当FutureTask处于未启动或已启动状态时,执行FutureTask.get()方法将导致调用线程阻塞
- 当FutureTask处于已完成状态时,执行FutureTask.get()方法将导致调用线程立即返回结果或抛出异常
- 当FutureTask处于未启动状态时,执行FutureTask.cancel()方法将导致此任务永远不会被执行
- 当FutureTask处于已启动状态时,执行FutureTask.cancel(true)方法将以中断执行此任务线程的方式来试图停止任务
- 当FutureTask处于已启动状态时,执行FutureTask.cancel(false)方法将不会对正在执行此任务的线程产生影响(让正在执行的任务运行完成)
- 当FutureTask处于已完成状态时,执行FutureTask.cancel(…)方法将返回false.
使用案例
FutureTask、Runnable、Callable
输出结果如下:
- 可以把FutureTask交给Executor执行
- 也可以通过ExecutorService.submit(…)方法返回一个FutureTask,然后执行FutureTask.get()方法或FutureTask.cancel(…)方法
- 除此以外,还可以单独使用FutureTask
Future、Callable
当一个线程需要等待另一个线程把某个任务执行完后它才能继续执行,此时可以使用FutureTask.
本文内容到此结束了,
如有收获欢迎点赞收藏关注️,您的鼓励是我最大的动力.
如有错误疑问欢迎各位大佬指出.
主页: 共饮一杯无的博客汇总保持热爱,奔赴下一场山海.
边栏推荐
- Batch大小不一定是2的n次幂!ML资深学者最新结论
- 结构体变量的首地址获取注意事项
- "Digital Economy Panorama White Paper" Special Analysis of Banking Industry Intelligent Marketing Application Released
- 张朝阳对话俞敏洪:一边是手推物理公式,一边是古诗信手拈来
- Web console control edit box
- 十分钟教会你如何使用VitePress搭建及部署个人博客站点
- 脱光衣服待着就能减肥,当真有这好事?
- WeChat payment development process
- 00后写个暑假作业,被监控成这笔样
- h264协议
猜你喜欢
随机推荐
WPF implements a MessageBox message prompt box with a mask
Here comes the question: Can I successfully apply for 8G memory on a machine with 4GB physical memory?
防止数据冒用的方法
听声辨物,这是AI视觉该干的???|ECCV 2022
PM2 configuration file
阿里高工带来的20022最新面试总结太香了
The redis library cannot be imported
electron 应用开发优秀实践
Byte Qiu Zhao confused me on both sides, and asked me under what circumstances would the SYN message be discarded?
h264协议
张朝阳对话俞敏洪:一边是手推物理公式,一边是古诗信手拈来
脱光衣服待着就能减肥,当真有这好事?
MongoDB-查询中$all的用法介绍
C2000在线升级主程序下载kernel完成后跳转到kernel运行的过程记录
问题来了:4GB物理内存的机器上申请8G内存能成功吗?
JD.com architects tidy up: what are the core technical knowledge points of jvm and performance tuning
Recommend a free 50-hour AI computing platform
结构体变量的首地址获取注意事项
专业人士使用的 11 种渗透测试工具
shell脚本------函数的格式,传参,变量,递归,数组