线程池的构造器
public ThreadPoolExecutor(
int corePoolSize, //核心线程数(最初创建的,不会被销毁)
int maximumPoolSize, //最大线程数(核心线程数 + 非核心线程数(额外创建的线程,会被销毁))
long keepAliveTime, //非核心线程在空闲后释放的时机,即非核心线程允许空闲的最大时间
TimeUnit unit, //非核心线程允许空闲的最大时间的单位
BlockingQueue<Runnable> workQueue, //有阻塞功能的任务队列
ThreadFactory threadFactory, //线程工厂
RejectedExecutionHandler handler //拒绝策略
) {}
拒绝策略
java
// ----------拒绝策略----------
ThreadPoolExecutor.AbortPolicy
//队列满后若继续调用submit提交任务则会抛出异常
ThreadPoolExecutor.CallerRunsPolicy
//队列满后若继续调用submit提交任务则会让调用submit的这个线程执行这个任务
ThreadPoolExecutor.DiscardOldestPolicy
//队列满后若继续调用submit提交任务则会丢弃最早加入且还未被执行的任务
ThreadPoolExecutor.DiscardPolicy
//队列满后若继续调用submit提交任务则会丢弃最晚加入且还未被执行的任务
几种现成的线程池
java
Executors.newCachedThreadPool().submit(() -> {});
//普通线程池,能自动扩容,不需要指定上限。无核心线程,全是非核心线程
Executors.newFixedThreadPool(2).submit(() -> {});
//固定线程数量的线程池,全是核心线程,无非核心线程
Executors.newScheduledThreadPool(2).submit(() -> {});
//附带定时器的线程池