【发布时间】:2012-08-08 14:24:05
【问题描述】:
有没有办法使用 ExecutorService 来暂停/恢复特定线程?
private static ExecutorService threadpool = Executors.newFixedThreadPool(5);
想象一下,我想停止 id=0 的线程(假设为每个线程分配一个递增的 id,直到达到线程池的大小)。
过了一会儿,通过按下一个按钮,假设我想恢复该特定线程,并让所有其他线程保持当前状态,可以暂停或恢复。
我在 Java 文档中发现了一个未完成的 PausableThreadPoolExecutor 版本。但它不适合我的需要,因为它会恢复池中的所有线程。
如果没有办法使用 ExecutorService 的默认实现来解决这个问题,谁能指点我的 Java 实现来解决这个问题?
【问题讨论】:
-
你确定吗?具有给定 id 的线程执行一些随机选择的作业,因此您正在停止一些未知的作业。这样做有什么意义?
-
想象以下情况:您有一个下载管理器,您可以在该管理器上停止和恢复下载。对于您正在下载的每个内容,无论什么不相关,并且您希望停止该下载以在任何您想要的地方恢复。这会让你的问题更清楚吗?
-
比较清楚,但还是没有多大意义。停止/恢复下载是关于业务逻辑的,而线程池是关于计算资源的。恕我直言,通过添加/删除资源来控制逻辑是个坏主意。
标签: java multithreading concurrency threadpool executorservice