- 作用:减少代码的灵活性,但是提高了稳定性。
- 线程池大致有以下四种方式实现
//只有一个线程的线程池
ExecutorService executorService1 = Executors.newSingleThreadExecutor();
//返回固定数量的线程池
ExecutorService executorService2 = Executors.newFixedThreadPool();
//创建不限定最大数量的线程池 (如果线程空闲60秒会自动回收 其实是有最大数量的)
ExecutorService executorService3 = Executors.newCachedThreadPool();
//可以延时执行,做定时调度
ExecutorService executorService4 = Executors.newScheduledThreadPool();
- 所有线程池的构建 都是由ThreadPoolExecutor这个类来构建,以下是源码 如图。
如图所示,共有7个核心的参数。
-
int corePoolSize, 核心线程数
-
int maximumPoolSize, 最大线程数
-
long keepAliveTime, 空闲线程存活时间
-
TimeUnit unit, 空间线程存活时间单位
-
BlockingQueue<Runnable> workQueue, 当线程数超过核心线程数的时候,会将超过的线程加入到阻塞队列中。排队
-
threadFactory 用来构建线程的工厂
-
RejectedExecutionHandler handler 拒绝策略