当前位置:网站首页>AQS同步组件-FutureTask解析和用例
AQS同步组件-FutureTask解析和用例
2022-08-09 11:58: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.
本文内容到此结束了,
如有收获欢迎点赞收藏关注️,您的鼓励是我最大的动力。
如有错误疑问欢迎各位大佬指出。
主页: 共饮一杯无的博客汇总保持热爱,奔赴下一场山海。
边栏推荐
- goalng-sync/atomic原子操作
- IDEA close/open reference prompt Usages
- Blocking, non-blocking, multiplexing, synchronous, asynchronous, BIO, NIO, AIO all in one pot
- TIC2000系列处理器在线升级
- GRPC整体学习
- 京东架构师呕心整理:jvm与性能调优有哪些核心技术知识点
- ThreadLocal类
- Semaphore SIGCHLD use, how to make the parent that the child performs over, how to make the distinction between multiple child processes. The end
- 【Adobe Premiere Pro 2020】pr2020安装和基本操作【PR安装、新建项目流程、导入及管理素材项目文件、添加标记、创建出入点剪辑视频、快速剪接及自动音乐卡点的方法
- Programmer's Exclusive Romance - Use 3D Engine to Realize Fireworks in 5 Minutes
猜你喜欢
00后写个暑假作业,被监控成这笔样
win10 outlook邮件设置
问题来了:4GB物理内存的机器上申请8G内存能成功吗?
阿里高工带来的20022最新面试总结太香了
腾讯欲成育碧最大股东/ 米哈游招NLP内容生成研究员/ AI发现四千余物种濒临灭绝...今日更多新鲜事在此...
2022 全球 AI 模型周报
redis库没法引入
非科班AI小哥火了:他没有ML学位,却拿到DeepMind的offer
JD.com architects tidy up: what are the core technical knowledge points of jvm and performance tuning
程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果
随机推荐
Django 无法链接mysql数据库
2022 全球 AI 模型周报
脱光衣服待着就能减肥,当真有这好事?
阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO 一锅端
基于STM32+铂电阻设计的测温仪
微信一面:一致性哈希是什么,使用场景,解决了什么问题?
无需精子卵子子宫体外培育胚胎,Cell论文作者这番话让网友们炸了
Shell正则表达式,三剑客之grep命令
Experiment record: the process of building a network
人体解析(Human Parse)开源数据集整理
Byte Qiu Zhao confused me on both sides, and asked me under what circumstances would the SYN message be discarded?
水能自发变成“消毒水”,83岁斯坦福教授:揭示冬天容易得流感的部分原因...
WeChat payment development process
李开复花上千万投的缝纫机器人,团队出自大疆
结构体变量的首地址获取注意事项
实验记录:搭建网络过程
预置第三方apk到MTK项目相关问题总结
我们真的需要DApp吗?App真的不能满足我们的幻想吗?
中科院打脸谷歌:普通电脑追上量子优越性,几小时搞定原本要一万年的计算...
罗振宇折戟创业板/ B站回应HR称用户是Loser/ 腾讯罗技年内合推云游戏掌机...今日更多新鲜事在此...