线程池有哪些好处?
- 重复使用线程资源,减少创建和销毁的频率,从而减少性能损耗.
- 重复使用线程资源,减少由于代码问题,造成线程大量创建,资源耗费.
- 便于维护(1、维护线程状态 2、维护任务状态 3、维护线程变量)
ThreadPoolExecutor 有哪些状态?
- RUNNING:接收新任务,同时处理阻塞队列中的任务
- SHUTDOWN:不接收新任务,但是处理阻塞队列中的任务
- STOP:不接收新任务,不处理阻塞队列中的任务,中断正在处理的任务
- TIDYING:当所有任务执行完,当前线程池已经没有工作线程,这时线程池状态为 TIDYING 状态,同时调用 TERMINATED 方法
- TERMINATED:调用 TERMINATED 方法后,线程状态为 TERMINATED
ThreadPoolExecutor 如何管理状态?
通过 ThreadPoolExecutor 内部原子变量 ctl 来进行线程状态管理
ThreadPoolExecutor 如何维护线程?
通过 ThreadPoolExecutor 内部类 Worker 封装线程 Thread 信息,并通过方法 runWorker() -> getTask() 来对线程进行维护
ThreadPoolExecutor 如何提交任务?
通过 ThreadPoolExecutor 内部方法 execute(Runnable) 来进行提交任务
注意事项:
阅读源码顺序:继承关系 -> 变量 -> 内部类 -> 方法.
BlockQueue -> ArrayBlockQueue 阻塞队列:
poll 方法在队列为空时,将返回 null,不为空清除并返回元素
队列 poll 方法take 方法在队列为空时,将会阻塞,只要队列中有任务可以被取出
队列 take 阻塞offer 方法在队列满时,将返回 false,队列没满时将元素加入队列,同时唤醒阻塞的队列,并返回 true
队列 offer 方法put 方法在队列满时,将会阻塞队列,队列没满时将元素加入队列,同时唤醒阻塞的队列
队列 put 方法
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!