2022-3-22 特殊的日子里,最近世界布满阴霾。愿国泰民安,世界和平!
一.线程池的创建方式:
1.继承Thread类
2.实现Runnable接口
3.实现callable有返回(返回。异常)
4.线程池ThreadPoolExecutor
二.线程池中的7个核心参数(常识)
public ThreadPoolExecutor(int corePoolSize, // 核心线程数
int maximumPoolSize, // 最大线程数
long keepAliveTime, // 最大线程数空闲时间
TimeUnit unit, // 空闲时间
BlockingQueue<Runnable> workQueue, // 工作队列
ThreadFactory threadFactory, // 线程工厂(构建线程,需要指定线程的信息)
RejectedExecutionHandler handler) {} // 拒绝策略
三。线程池的状态
RUNNING 运行状态,正常接受任务,处理workQueue里的任务。
SHUTDOWN 调用了shutdown()方法。不会接受新的任务,可以处理workQueue里的任务。
STOP 调用了shutdown()方法时,不会接受新的任务,不会处理workQueue里的任务,正在执行的任务也要中断。
tidyingTIDYING 过渡状态,意味着线程池准备好一切,可以结束了。
TERMINATED 终止状态 在经过tidying状态后,执行terminated()方法就进入终止状态。
四。ThreadPoolExector核心属性。
//ctl是线程的核心参数,描述俩个线程池状态和线程中工作线程的数量
//int类型 32为bit位标识。高三位为线程池状态,低29位为线程池数量
private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
//线程池最大容量 32-3=29
private static final int COUNT_BITS = Integer.SIZE - 3;
// 线程池状态的计算 private static final int RUNNING = -1 << COUNT_BITS; // 高三位是111, private static final int SHUTDOWN = 0 << COUNT_BITS; // 高三位是000, private static final int STOP = 1 << COUNT_BITS; // 高三为是001, private static final int TIDYING = 2 << COUNT_BITS; // 高三位是010, private static final int TERMINATED = 3 << COUNT_BITS; // 高三位是011,
// 得到高三位的数据,拿线程池状态
private static int runStateOf(int c) { return c & ~CAPACITY; }
// 得到低29位的数据,拿线程池工作线程数量
private static int workerCountOf(int c) { return c & CAPACITY; }