并发操作
并发操作之——线程池遇到的坑.
并发操作之——线程池遇到的坑
一、线程池不允许使用 Executors 去创建,要通过 ThreadPoolExecutor的方式原因
Executors创建的线程池底层也是调用 ThreadPoolExecutor,只不过使用不同的参数、队列、拒绝策略等,如果使用不当,会造成资源耗尽问题;
直接使用ThreadPoolExecutor让使用者更加清楚线程池允许规则,常见参数的使用,避免风险。
二、常见的线程池问题
1、newFixedThreadPool和newSingleThreadExecutor:
队列使用LinkedBlockingQueue,队列长度为 Integer.MAX_VALUE,可能造成堆积,导致OOM。
2、newScheduledThreadPool和newCachedThreadPool:
线程池里面允许最大的线程数是Integer.MAX_VALUE,可能会创建过多线程,导致OOM。
总结
创建线程池的方式和线程池应用中常见的问题。