线程池类型:
-
ScheduledThreadPool
作用:支持定时或周期性执行任务。
线程池参数:
最大线程数为:Integer.MAX_VALUE
阻塞队列:DelayedWorkQueue
KeepAliveTime为0;
使用场景:适用于需要定时或定期执行任务,并且需要限制线程数数量的需求场景。
-
SingleThreadExecutor
作用:单线程执行任务。
线程池参数:
核心线程数:1
最大线程数为:1
阻塞队列:LinkedBlockingQueue
非核心线程空间存活时间为:0秒
使用场景:适用于需要顺序执行任务的场景,保证任务按顺序执行,适用于需要顺序处理的场景;
-
FixedThreadPool
核心线程数和最大线程数相同,适用于任务数量大致固定的场景。如果任务数量超过线程池处理能力,会触发拒绝策略;
线程池参数:
核心线程数和最大线程数一致;
非核心线程空闲存活时间,即KeepAliveTime为0
阻塞队列为无届队列LinkedBlockingQueue
工作机制:
a.提交线程任务
b.如果线程数少于核心线程数,创建核心线程执行任务
c.如果线程数等于核心线程,把任务添加到LinkedBlockingQueue阻塞队列
d.如果线程执行完任务,去阻塞队列取任务,继续执行
使用场景:适用于处理cpu密集型任务,确保cpu在长期被工作线程使用的情况下,尽可能的少分配线程,即适用执行长期的任务。
-
CachedThreadPool
线程数几乎可以无限增加,适用于任务数量波动较大的场景;
线程数参数:
核心线程数为:0
最大线程数为:Integer.MAX_VALUE
工作队列是SynchronousQueue同步队列
非核心线程空闲存活时间为60秒
工作机制:
a.提交线程任务
b.因为核心线程数为0,所以任务直接加到SynchronousQueue工作队列
c.判断是否有空闲线程,如果有,就去取出任务执行
d.如果没有空闲线程,就新建一个线程执行
e.执行完任务的线程,就可以存活60秒,如果在这期间,接到任务,就可以继续存活下去,否则被销毁。
使用场景:用于并发执行大量短期的小任务。