Java多线程学习笔记(一)

一、看源码

1、ThreadPoolExecutor相关

java.util.concurrent 包下

√ \color{#FF7D00}{√}  继承树:
在这里插入图片描述

1)、Executor:

  • 只有一个 execute ( Runnable command ) 方法,没有返回值,但是没有标注@FunctionalInterface?
  • 继承后,可以使用命令模式。

2)、ExecutorService:

  • 在 executor 上封装了一层,提供了 Runnable(Callable) 的生命周期管理的方法,并且返回 Future 对象。
  • 所以 submit() 和 execute() 的区别是提交的方法和是否有返回值。
  • shutdown() 方法在终止前允许执行以前提交的任务,而 shutdownNow() 方法阻止等待任务启动并试图停止当前正在执行的任务。在终止时,执行程序没有任务在执行,也没有任务在等待执行,并且无法提交新任务。应该关闭未使用的 ExecutorService 以允许回收其资源。

3)、AbstractExecutorService:

  • 提供了 ExecutorService 的默认实现,但是没有实现 Executor 的 execute 方法。
  • 其中的 submit(Runnable task) 方法,其实是将 Runnable 转换为了 Callable
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    采用适配器模式,RunnableAdapter(task,result) 来适配
    在这里插入图片描述
    在这里插入图片描述

4)、ScheduledExecutorService

  • 同上,可以做定时任务。

5)、ThreadPoolExecutor

  • 线程池相关的

2、FutureTask相关

√ \color{#FF7D00}{√}  继承树:
在这里插入图片描述

√ \color{#FF7D00}{√}  Callable(FunctionalInterface)

  • 只有一个 V call ( ) throws Exception 方法
  • 和 Runnable 相比,有一个泛型,方法有返回值,且能抛异常,所以可以看作是 Runnable 的扩展

√ \color{#FF7D00}{√}  Funture(interface)

  • future模式的返回值,提供了检查任务是否完成,等待任务完成,检索任务结果等方法

1)、FutureTask常量

字段的偏移量,通过static代码块初始化:
state 使用 volatile 修饰,保证了可见性,搭配后续set等方法中的 Unsafe.putOrderedInt() 的有序写入。
在这里插入图片描述
定义了多个标识状态的常量,以及相应的状态流转:
在这里插入图片描述

2)、FutureTask方法

run方法:
在这里插入图片描述
set方法:执行成功保存结果。
先通过CAS操作,判断 stateOffset 和 NEW 相等,相等则把 COMPLETING 赋给 stateOffset,并执行下面操作;
保存执行结果,并将状态转为已完成
在这里插入图片描述

二、工具包

https://gitee.com/zilong123666/cabinet/tree/master/src/main/java/com/zilong/cabinet/thread

三、多线程学习笔记

Java多线程学习笔记(二)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_tt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值