理解Java FutureTask

FutureTask实现的功能

它的功能就像他继承的接口一样:Runnable与Future。他实现了一套机制将两者连接起来。
Runnable主要方法是run(),用于执行一些程序。
Future主要用两个功能:get和cancel。

FutureTask就是将他们两者联系起来。即run()运行完之后如何让get能拿到数据;当数据没有返回时get如何阻塞和当完成后让get返回;如何让用户取消当前任务。

Future中get方法的实现

get方法是带阻塞的。当线程运行完成可以直接通过get获取数据,当线程未完成计算则阻塞当前线程,知道运行完成解除阻塞。

这个场景是很典型的阻塞-唤醒,其内部使用LockSupport实现。当用户调用get方法后将该线程加入链表,并阻塞。当run方法完成,唤醒所有链表中所有阻塞的线程,各线程返回数据。

Original: https://www.cnblogs.com/hnrainll/p/12973337.html
Author: Leo Chin
Title: 理解Java FutureTask

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/539294/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Linux命令

    Original: https://www.cnblogs.com/zmn0104/p/13858650.htmlAuthor: Sunshine0104Title: Linux命…

    Java 2023年6月7日
    073
  • Java笔记_web.xml文件

    在JavaEE工程中,web.xml文件是用来初始化配置信息:比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等…

    Java 2023年6月5日
    092
  • JAVA数组案例!

    数组的用例 一、案例需求: 有这样的一个数组,元素是{68,27,95,88,171,996,51,210}。求出该数组中满足要求的元素和, 要求是:求和的元素个位和十位都不能是7…

    Java 2023年6月5日
    084
  • npm常用命令及参数总结

    NPM几个常用命令和参数的意思: npm&#xA0;<span class="hljs-keyword"><span class=&q…

    Java 2023年6月5日
    071
  • Dos 命令

    管理员方式运行:选择以管理员方式与运行 常用的Dos命令 Original: https://www.cnblogs.com/mycode-blog/p/15365967.html…

    Java 2023年6月8日
    063
  • JVM-垃圾回收机制

    引用计数法 可达性分析 Java 中常见的垃圾回收算法 标记-清除算法 复制算法 标记-整理算法 分代回收算法 内存分配机制 Minor GC 和 Full GC 垃圾收集器 在 …

    Java 2023年6月9日
    070
  • 踩坑了!0作为除数,不一定会抛出异常!

    你好呀,我是歪歪。 踩坑了啊,又踩坑了啊! 这次踩到一个特别无语的常识坑。知道真相的那一刻,人就是整个麻掉。 先上个代码: private&#xA0;static&…

    Java 2023年6月5日
    095
  • 5.0.SpringBoot整合Kafka(工具安装ZK)

    我们在使用Kafka的时候,是依赖于zookeeper的,所以我们先安装好工具在去集成,这样之后也能直接跑起来。 我是Windows系统所以直接安装Win版本的zk和Kafka(M…

    Java 2023年6月9日
    076
  • JSON数据和Java对象的相互转换

    JSON数据和Java对象的相互转换 JSON解析器 创建的解析器:Jsonlib,Gson,Fastjson,jackson JSON转为Java对象 使用步骤: 导入jacks…

    Java 2023年6月6日
    067
  • Nacos 本地单机版部署步骤和使用

    本系列是 Spring Cloud 微服务实战系列教程。之前在 《Spring Cloud Eureka 入门 (一)服务注册中心详解》 聊过 Spring Cloud Eurek…

    Java 2023年6月13日
    093
  • 设计模式-day05

    6,行为型模式 6.5 状态模式 6.5.1 概述 【例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更…

    Java 2023年6月13日
    056
  • 六度问题(转载)

    What do Leonard Nimoy, Stana Katic, and Robert Downey Jr. have in common? They all have a …

    Java 2023年5月30日
    083
  • 连接池-Mybatis源码

    持续更新:https://github.com/dchack/Mybatis-source-code-learn Mybatis连接池 有这么个定律,有连接的地方就有池。在市面上,…

    Java 2023年6月14日
    0131
  • SpringBoot+WebSocket实时监控异常

    写在前面 此异常非彼异常,标题所说的异常是业务上的异常。 最近做了一个需求,消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的实时监控页面实时获取到该设备的信息及位置,然后安…

    Java 2023年6月16日
    071
  • 六、面向对象编程

    一、什么是类?什么是对象? 类:具有共同特征的描述 对象:真实存在的具体事例 二、对象的内存图: 两个变量指向同一个对象内存图 三、构造器 就是无参构造方法和有参构造方法 四、th…

    Java 2023年6月6日
    091
  • 设计模式学习笔记(二十二)解释器模式及其实现

    解释器模式(Interpreter Design Pattern)指给定一个”语言”,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语…

    Java 2023年6月6日
    0115
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球