更改ThreadPoolExecutor的队列大小

tdi*_*mig 6 java multithreading threadpool

我需要能够更改ThreadPoolExecutor的任务队列的大小.当然,BlockingQueue不支持更改大小,并且ThreadPoolExecutor不支持更改队列.

因此,我提出的方法是使用ThreadPoolExecutor.shutdownNow(),它返回一个尚未执行的Runnables列表.然后我可以创建一个具有所需队列大小的新执行程序并重新提交所有任务.

问题在于shutdownNow()调用时正在进行的任务.据我所知,javadoc中,执行程序将在当前执行taks的所有线程上调用Thread.interrupt().我不希望我的任务被杀死.这个问题可能是一个冗长的方式,询问如何编写我的任务,以便Thread.interrupt()不会有任何影响?

jav*_*dba 3

混合使用“shutdown()”(不是 shutdownNow()),然后使用 getPoolSize()/isTermminate() 进行轮询,您可以 (a) 停止现有的池。然后 (b) 同时(在单独的线程中)可以创建具有所需大小的新队列。您需要在以下方面进行权衡:您是否可以允许暂时存在比所需数量更多的线程(当第一个池关闭时)。