线程池死循环系统卡住

案例: 


同一个线程池。
首先核心线程数是8,我一次提交了 > 8个主任务,然后主任务又各自开启了几个子任务。
所以子任务没有核心线程来跑,只能放进阻塞队列等。
但主任务又等待子任务的结果,不释放占用线程,子又没得执行

死循环,导致系统卡住

原因:

例如:线程池核心线程数为8个,最大线程数为200个,阻塞队列为15个。
此时任务直接下发了10个主线程,每个主线程内部又下发了新的子任务。 
当线程池接收到任务后,先判断核心线程有没有空余,如果有则创建并且执行,如果核心线程数8个都被占了,此时剩余的2个会加入到阻塞队列中等待。

此时你会发现,线程池内部发生了死锁,也就是死循环。 互相等待。

你可能感兴趣的:(java,开发语言)