线程池

ThreadPoolExecutor

核心线程数

最大线程数

线程存活时间

工作队列大小

指定饱和策略

工作流程

1、默认情况下,创建线程池后,不会立即创建线程

2、每提交一个任务,创建一个线程,直到当前线程数达到核心线程数

3、当达到核心线程数,继续提交任务,任务会被放入工作队列中排队

4、当达到核心线程数,并且工作队列满了,则会继续创建线程,直到当前线程数达到最大线程数

5、当达到最大线程数,并且工作队列满了,继续提交任务,则会触发指定的饱和策略

6、当线程超过存活时间,标记为可回收,如果当前线程数超过核心线程数,这个线程将被终止

线程池优点

控制线程数量

管理线程生命周期

指定饱和策略

饱和策略

AbortPolicy

默认,直接抛出异常,RejectedExecutionException

捕获异常,编写处理代码

DiscardPolicy

抛弃策略,不作任何处理

DiscardOldestPolicy

抛弃最旧策略,抛弃下一个即将被执行的任务

注意:不要与优先级队列一起使用

CallerRunsPolicy

调用者运行策略,将任务返回给调用线程执行,占用调用线程,使其暂时不能提交任务

注意:请求保存在TCP层队列,造成服务器过载,影响调用线程性能

工作队列

与线程池配合使用,保存等待执行的任务

ArrayBlockingQueue

列表队列,必须设置初始队列大小,先进先出

有界队列,工作队列满了,并且超过最大线程数,采取饱和策略

LinkedBlockingQueue

链表队列,先进先出

无界队列,超过核心线程数,任务将一直加入工作队列

SynchronousQueue

超过最大线程数,采取饱和策略

直接提交队列,不是真正的队列,无任务缓存

PriorityBlockingQueue

特殊无界任务队列,根据优先级调度任务

浙ICP备11005866号-12