线程池源码解读

未完待续

jdk:1.8.0_65

1.线程池类图

  由图可见,线程池入口为Executors,实现逻辑在ThreadPoolExecutor

2.线程池状态,以及如何转换

 1         //运行中
 2         private static final int RUNNING    = -1 << COUNT_BITS;
 3         //关闭,执行完当前线程,以及阻塞队列中线程
 4         private static final int SHUTDOWN   =  0 << COUNT_BITS;
 5         //停止,停止正在执行的线程
 6         private static final int STOP       =  1 << COUNT_BITS;
 7         //过渡阶段,所有线程执行完成,包括阻塞对了中的线程
 8         private static final int TIDYING    =  2 << COUNT_BITS;
 9         //终止。线程池调用terminated()后的状态
10         private static final int TERMINATED =  3 << COUNT_BITS;

3.线程池种类

newCachedThreadPool 缓存型线程池,首先查看线程池中是否有以前建立的线程池,如果有就reuse,没有就新建一个线程入池

newFixedThreadPool(2) 固定数量线程的线程池

newSingleThreadExecutor 单线程的线程池,即任意时间线程池中只有一个线程

newScheduledThreadPool(4) 调度型线程池,这个线程池中的线程按照schedule依次delay执行

newSingleThreadScheduledExecutor

4.创建线程池

线程池六个参数:

核心线程数

最大线程数

空闲的线程保留时间

空闲线程保留时间单位

阻塞队列,存储等待执行的任务

线程工厂,用来创建线程

5 停止线程的三种方式

1)使用stop强行终止正在运行或是挂起的线程 thread.stop()。此方法不安全,

2)使用退出标志,使线程正常退出,当run方法完成后线程终止。针对不停止的线程无效。

3)使用interrupt中断线程,Thread.currentThread().interrupt(),当interrupt被调用的时候,InterruptedExecution将被抛出,故可以设计时在run方法中捕获异常,让线程安全退出。

  

6.源码解读,以及流程图

7.线程池如何做到重用线程

原文地址:https://www.cnblogs.com/guobm/p/10075225.html