1,常见的4大线程池
public static void main(String[] args) {
//只有一个线程的线程池
ExecutorService single = Executors.newSingleThreadExecutor();
//创建可缓存的线程池,线程池线程个数最大可以达到Integer.MAX_VALUE,线程自动回收
Executors.newCachedThreadPool();
//固定线程数的线程池
Executors.newFixedThreadPool(10);
//创建可以延迟执行任务的线程池
Executors.newScheduledThreadPool(20);
}
2,线程池常用参数
- corePoolSize 核心线程数
- maximunPoolSize 最大线程数
- keepAliveTime 当线程池中得线程数大于核心线程数时并且线程是闲置状态,线程存活得最大时间
- TimeUnit 存活时间的时间单位
- workQueue 用于保存等待执行的任务的阻塞队列,比如基于数组的有界ArrayBlockingQueue、基于链表的无界LinkedBlockingQueue、最多只有一个元素的同步队列SynchronousQueue及优先级队列PriorityBlockingQueue等
- ThreadFactory:创建线程的工厂
- RejectedExecutionHandler:饱和策略,当队列满并且线程个数达到maximunPoolSize后采取的策略,比如AbortPolicy(抛出异常)、CallerRunsPolicy(使用调用者所在线程来运行任务)、DiscardOldestPolicy(调用poll丢弃一个任务,执行当前任务)及DiscardPolicy(默默丢弃,不抛出异常)