当前位置:网站首页>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.
本文内容到此结束了,
如有收获欢迎点赞收藏关注️,您的鼓励是我最大的动力.
如有错误疑问欢迎各位大佬指出.
主页: 共饮一杯无的博客汇总保持热爱,奔赴下一场山海.
边栏推荐
猜你喜欢
1小时直播招募令:行业大咖干货分享,企业报名开启丨量子位·视点
Information system project managers must memorize the core test sites (63) The main process of project portfolio management & DIPP analysis
苹果Meta都在冲的Pancake技术,中国VR团队YVR竟抢先交出产品答卷
两分钟录音就可秒变语言通!火山语音音色复刻技术如何修炼而成?
十分钟教会你如何使用VitePress搭建及部署个人博客站点
曲鸟全栈UI自动化教学(八):框架代码讲解和进一步优化
HAproxy:负载均衡
Too much volume... Tencent was asked on the side that the memory was full, what would happen?
【Untitled】
The latest interview summary in 20022 brought by Ali senior engineer is too fragrant
随机推荐
MySQL 原理与优化,Group By 优化 技巧
推荐一个免费50时长的AI算力平台
张朝阳对话俞敏洪:一边是手推物理公式,一边是古诗信手拈来
问题来了:4GB物理内存的机器上申请8G内存能成功吗?
ABAP 报表中如何以二进制方式上传本地文件试读版
Here comes the question: Can I successfully apply for 8G memory on a machine with 4GB physical memory?
Too much volume... Tencent was asked on the side that the memory was full, what would happen?
Django 无法链接mysql数据库
曼城推出可检测情绪的智能围巾,把球迷给整迷惑了
鹅厂机器狗花式穿越10m梅花桩:前空翻、单桩跳、起身作揖...全程不打一个趔趄...
MongoDB-查询中$all的用法介绍
一甲子,正青春,CCF创建六十周年庆典在苏州举行
Gumbel_Softmax 概要
electron 应用开发优秀实践
已解决IndentationError: unindent does not match any oute r indentation Level
GRPC整体学习
OpenSSF的开源软件风险评估工具:Scorecards
Information system project managers must memorize the core test sites (63) The main process of project portfolio management & DIPP analysis
WPF 实现带蒙版的 MessageBox 消息提示框
Web console control edit box