executor和线程池是什么关系(使用Executors声明线程池)
executor和线程池是什么关系(使用Executors声明线程池)} //do nothing try { Thread.sleep(10000); } catch (InterruptedException e) {
隐患: 造成JVM OOM
ExecutorService executor = Executors.newFixedThreadPool(10);
for (int i = 0; i < Integer.MAX_VALUE; i ) {
executor.execute(() -> {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
//do nothing
}
});
}
Executors.newFixedThreadPool
new FixedThreadPool线程池的核心线程数是固定的,
它使用了近乎于无界的LinkedBlockingQueue阻塞队列。
当核心线程用完后,任务会入队到阻塞队列,如果任务执行的时间比较长,没有释放,
会导致越来越多的任务堆积到阻塞队列,最后导致机器的内存使用不停的飙升,
造成JVM OOM。