//记录一下为什么阿里禁止使用一下方式创建线程池
代码语言:javascript复制
ExecutorService executorService = Executors.newCachedThreadPool();
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
}
Integer.MAX_VALUE 容易OOM
//获取电脑线程数Runtime.getRuntime().availableProcessors()
代码语言:javascript复制/**
* 如果是CPU密集型,CPU用的高,maximumPoolSize = CPU核数 1
*
*/
//获取电脑线程数
System.out.println(Runtime.getRuntime().availableProcessors());
ExecutorService executorService = new ThreadPoolExecutor(
2,//核心线程数
5,//最大线程数
2L,//等待时间
TimeUnit.SECONDS,,//等待时间的单位
new LinkedBlockingQueue<>(3),//等待的阻塞消息队列
Executors.defaultThreadFactory(),//使用默认工厂创建
/**
* 拒绝策略
* .AbortPolicy()默认的 ,拒绝执行策略
* CallerRunsPolicy(),该策略不会抛弃任务,也不会爆出异常,将任务会退给调用者
* DiscardPolicy(),多余丢失不报错
* DiscardOldestPolicy 丢掉最老的
*/
// new ThreadPoolExecutor.AbortPolicy());
// new ThreadPoolExecutor.CallerRunsPolicy());
// new ThreadPoolExecutor.DiscardPolicy());
new ThreadPoolExecutor.DiscardOldestPolicy());//拒绝策略