【发布时间】:2016-04-19 23:54:45
【问题描述】:
我正在使用固定大小的 Java 线程池 (ExecutorService)。假设我向线程池提交了一个作业并且该作业空闲。
是否有可能从线程池中删除空闲作业,以便处理队列中的其他作业,然后再添加空闲作业?
【问题讨论】:
-
“空闲”是什么意思?任务在完成之前不会产生线程。执行者不会“抢占”它。所以如果你在那里
wait,它仍然会消耗池中的一个线程。 -
线程管理是池的工作,而不是你的工作。设置池并让它完成工作。
-
删除空闲线程将否定object pool pattern(除非池管理它)。
-
线程可能被删除。如果线程抛出异常,它将被删除并替换为新线程。 (另外,你说的是“固定大小”。有些线程池不是固定大小的,会自己删除空闲线程。)
标签: java multithreading threadpool executorservice