多线程如何在Java中暂停/恢复ExecutorService中的所有线程?
我向Java中的executorservice提交了一堆作业,我想暂时暂停所有这些作业。最好的方法是什么?我怎样才能恢复?还是我完全错了?我是否应该遵循其他模式来实现我想要实现的目标(即暂停/恢复执行服务的能力)
你可以在下面搜索框中键入要查询的问题!
我向Java中的executorservice提交了一堆作业,我想暂时暂停所有这些作业。最好的方法是什么?我怎样才能恢复?还是我完全错了?我是否应该遵循其他模式来实现我想要实现的目标(即暂停/恢复执行服务的能力)
# 1 楼答案
我对你接受的答案提出了一些批评,但这些批评不是很有建设性。。。这是我的解决方案。我会使用这样的类,然后在需要暂停功能的任何地方/任何时候调用
checkIn
。在GitHub上找到它例如:
这还有一个额外的好处,即您可以通过一次调用
Continue
的pause
来暂停多个线程# 2 楼答案
为了回答我自己的问题,我在
ThreadPoolExecutor
{a1}的javadocs中找到了一个PausableThreadPoolExecutor
示例。以下是我使用Guava显示器的版本:# 3 楼答案
我在executor中寻找暂停/恢复功能,但具有等待当前正在处理的任何任务的附加功能。下面是其他优秀实现的变体,添加了等待函数。我用单线程在executor上测试它。所以基本用法是:
类别代码:
# 4 楼答案
我知道这是老生常谈,但我尝试了所有这些答案,但没有一个对我试图用可暂停计时器做的事情起作用;一旦恢复(一次完成),他们都会按照计划扔掉所有数据
相反,我在GitHub*here上找到了这个
Timer
类。这对我来说非常有效*我没有编写此代码,只是找到了它
# 5 楼答案
问题在于,可运行/可调用程序本身需要检查何时暂停/恢复。有很多方法可以做到这一点,这取决于您对如何最好地做到这一点的要求。无论您需要什么样的解决方案,都可以使等待的线程可中断,从而可以干净地关闭线程