我需要能够更改ThreadPoolExecutor的任务队列的大小。当然,BlockingQueue 不支持改变大小,ThreadPoolExecutor 也不支持改变队列。
所以,我想出的方法是使用ThreadPoolExecutor.shutdownNow(),它会返回一个尚未执行的 Runnables 列表。然后我可以创建一个具有所需队列大小的新执行器并重新提交所有任务。
问题在于调用 shutdownNow() 时正在进行的任务。据我从 javadoc 中得知,执行程序将在当前执行任务的所有线程上调用 Thread.interrupt() 。我不希望我的任务被杀死。这个问题可能是询问如何编写我的任务以使 Thread.interrupt() 不会产生任何影响的冗长方式?