日期:2014-05-19  浏览次数:20648 次

ThreadPoolExecutor worker 异常导致core thread size减少
假设创建了15个core size的固定大小线程池。
ThreadPoolExecutor discoveryPool = (ThreadPoolExecutor) Executors
.newFixedThreadPool(15);

发现,在跑的过程中,run线程因为异常报错, 结果 core size线程数也降了下来。不再是15个core size了。
请教这种情况应该如何避免?

------解决方案--------------------
应该会自动加上去的吧
------解决方案--------------------
试验了一下,10个线程,5个抛出异常
最后用discoveryPool.getCorePoolSize()得到的值还是10
------解决方案--------------------
应该是线程池里没有一个活着的线程了,当没有任务提交的时候它不会自动创建线程

如果执行完抛出异常的代码再有其它不抛异常的任务提交,就不会退出了

探讨

抛运行时异常。 core size 给15 。 循环给100个线程执行。 每次都抛运行时异常,你看看main 方法是不是结束了。正常的话,应该是 不会结束的。