前言
面试常问线程池相关问题,其实不难记,只需要记住三大方法,7大参数,四大拒绝策略就OK了。
三大方法
Executors.newSingleThreadExecutor();–创建一个线程的线程池
Executors.newFixedThreadPool(int n);–创建指定线程的线程池
Executors.newCachedThreadPool();–创建可缓存的线程池
七大参数
ThreadPoolExecutor(
int corePoolSize, //核心线程池大小
int maximumPoolSize, //最大核心线程池大小
long keepAliveTime, //超时了 无调用会释放
TimeUnit unit, //超时单位
BlockingQueue workQueue, //阻塞队列
ThreadFactory threadFactory, //用于创建线程的线程工厂
RejectedExecutionHandler handler //拒绝策略
)
四大拒绝策略
ThreadPoolExecutor.AbortPolicy 队列满了,不处理新任务,抛异常
ThreadPoolExecutor.CallerRunsPolicy 哪来的回哪去(一般回主线程)
ThreadPoolExecutor.DiscardPolicy 队列满了,丢掉任务,不抛异常
ThreadPoolExecutor.DiscardOldestPolicy 队列满了,尝试和最早线程竞争,不会抛出异常