线程池类别
Executors 下有五类线程池
参数介绍:
- corePoolSize:核心线程数,核心线程会一直存活。
- maximumPoolSize:最大线程数,决定线程池最多可以创建多少线程。
- keepAliveTime:空闲时间,当线程闲置超过空闲时间时就会被销毁。
- uint:空闲时间的单位。
- workQueue:缓冲队列
- ArrayBlockingQueue:有界队列,有最大容量闲置。
- LinkedBlockingQueue:无界队列,不限制容量。
- SynchronousQueue:同步队列,内部没有缓冲区。
- threadFactory:设置线程池工厂方法,用来创建新的线程方法,可以对线程的属性进行定制,例如线程的group,线程名等,一般使用默认的工厂类即可。
- handler:线程池满时的拒绝策略,
- Abort:线程池满后,提交新任务时,会抛出异常,默认拒绝策略。
- Discard:线程池满后,提交新任务时,对任务进行丢弃。
- CallerRuns:线程池满后,提交新任务时,会直接执行提交的任务。
- DiscardOldest:线程池满后,提交新任务时,会丢弃最早提交的任务。
各类线程池调用参数方法
固定大小线程池:
- -corePoolSize和maximumPoolSize:设置成指定的线程数
- workQueue:LinkedBlockingQueue
源码
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
Cached线程池:
- corePoolSize:0
- maximumPoolSize:Integer.MAX_VALUE
- keepAliveTime:60
- workQueue:SynchronousQueue
源码
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
}
单线程线程池:
- corePoolSize和maximumPoolSize:1
源码
public static ExecutorService newSingleThreadExecutor() {
return new FinalizableDelegatedExecutorService
(new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>()));
}
Scheduled线程池:
- workQueue:DelayWorkQueue,按延迟时间获取任务的优先级队列
源码
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
return new ScheduledThreadPoolExecutor(corePoolSize);
}
线程池任务执行流程
调用方法:
- 1、execute
- 2、submit:可以返回一个future对象,根据future对象可以了解任务的执行情况,可以取消任务的执行,还可以获取任务的执行结果或者执行异常。