创建线程池
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L,
TimeUnit.SECONDS, new SynchronousQueue());
参数分析
public ThreadPoolExecutor(int corePoolSize, //核心线程数
int maximumPoolSize, //最大线程数
long keepAliveTime, // 非核心线程不活动存活时间
TimeUnit unit, //非核心线程 不活动销毁时间单位
BlockingQueue<Runnable> workQueue,//阻塞队列
ThreadFactory threadFactory,//线程池创建线程工厂,这个线程池创建的线程全部通过这个工厂创建(可以添加一些前缀名称方便通过日志查看线程)
RejectedExecutionHandler handler //线程都在处理任务且任务队列也满了,拒绝处理策略
) {
dosomething.....
}
参数选择
BlockingQueue
java8提供了BlockingQueue 的实现有以下几种
ArrayBlockingQueue 有大小限制的队列
LinkedBlockingQueue 可以一直存元素的队列 可能会内存溢出
SynchronousQueue 交换队列 , 不存元素,效率很高
…
ThreadFactory
自定义实现 ThreadFactory 去重新设置线程名称
RejectedExecutionHandler
ThreadPoolTaskExecutor对象使用