我需要能够更改ThreadPoolExecutor任务队列的大小.当然,BlockingQueue不支持改变大小,ThreadPoolExecutor也不支持改变队列。所以,我想出的方法是使用ThreadPoolExecutor.shutdownNow(),这会返回一个尚未执行的Runnable列表。然后我可以创建一个具有所需队列大小的新执行程序并重新提交所有任务。问题在于调用shutdownNow()时正在进行的任务。据我从javadoc中得知,执行程序将在当前执行任务的所有线程上调用Thread.interrupt()。我不希望我的任务被杀死。这个问题可能是询问如何编写我的任务以使
我正在运行一个高度并发的Java程序。当许多线程向执行程序服务提交任务时,主线程会在某个时刻调用ExecutorService.shutdownNow()。执行此操作后,我希望:执行者服务不会接受额外的任务执行者服务的队列清晰其余运行的worker被中断,也就是说,如果他们正确管理InterruptedException和/或显式检查Thread.currentThread().isInterrupted()由于我处于以下情况:执行程序服务由于ExecutorService.shutdownNow()而“关闭”,但并未关闭,即ExecutorService.awaitTerminati
ScheduledExecutorService从ExecutorService继承了两个方法,shutdown()和shutdownNow().它们的区别:shutdowninitiatesanorderlyshutdowninwhichpreviouslysubmittedtasksareexecuted,butnonewtaskswillbeaccepted.Invocationhasnoadditionaleffectifalreadyshutdown.shutdownNowattemptstostopallactivelyexecutingtasks,haltstheproc
我想知道shutdown()和shutdownNow()关闭ExecutorService的基本区别?据我所知:shutdown()应该用于graceful关闭,这意味着应该允许所有正在运行并排队等待处理但未启动的任务完成shutdownNow()会进行一次abrupt关闭,这意味着一些未完成的任务被取消,未启动的任务也被取消。还有什么我遗漏的隐式/显式的吗?P.S:我在Howtoshutdownanexecutorservice上发现了另一个问题与此相关,但不完全是我想知道的。 最佳答案 总而言之,你可以这样想:shutdown(