一马平川
不积跬步无以至千里,后继才能薄发

Java线程池源码实现笔记

2022年03月20日
0
未分类

线程池

Executor框架

基于Executor框架,通过消费者-生产者模式,把任务的提交和执行分离。

1
2
3
public interface Executor {
void execute(Runnable command);
}

在Execute框架中,线程不是执行主要的抽象,任务才是。

执行策略

  • 在什么线程中执行任务
  • 任务按照什么顺序执行(FIFO、LIFO、优先级)
  • 有多少个任务能够并发执行
  • 在队列中有多少个任务在等待执行
  • 系统过载需要拒绝任务时,应该选哪个任务,并如何通知应用程序有任务被拒绝
  • 执行任务之前之后,应该做哪些动作

ExecutorService

ExecutorService 拓展了 Executor ,拓展出了生命周期,用于管理处理器的生命周期,有:运行、关闭、已终止三个状态

Timer和ScheduledThreadPoolExecutor区别

  • Timer

    基于绝对时间调度机制

    单线程执行,如果执行时间超过周期,则会漏执行

    执行线程抛出未检查错误时不会恢复

  • ScheduledThreadPoolExecutor

    基于相对时间调度机制

    基于线程池执行

线程饥饿死锁

在线程池中,执行中线程等待工作队列线程而导致死锁

线程池构造参数

  • int corePoolSize

    基本大小,决定了线程池在空闲的时候会留存多少闲置线程

  • int maximumPoolSize

    最大大小,决定线程池同时活动线程数量的上限

  • long keepAliveTime

    闲置线程存活时间

  • TimeUnit unit

    时间单位

  • BlockingQueue workQueue

  • ThreadFactory threadFactory

  • RejectExecutionHandler handler

    饱和策略:

    1. 中止
    2. 调用者运行
    3. 抛弃最旧任务

扩展ThreadPoolExecutor

可以对线程池进行拓展,改写 beforeExecuteafterExecuteterminated ,实现对线程池的日志、监控、计时等功能

如果喜欢这篇文章,可以给作者评个份哦~

原文声明: "转载本站文章请注明作者和出处Nothinglin ,请勿用于任何商业用途"

公众号:苦逼的学生仔