在我的应用程序中,我使用了自定义 ThreadPoolExecutor,它可以通过扩展 ThreadPoolExecutor 类来暂停和恢复执行器。同样,我希望在执行 ExecutorService 的 shutdown 方法之后实现重新启动功能。我首先尝试创建 ThreadPoolExecutor 的新实例,但失败了。我发现this question并尝试了 ExecutorCompletionService
这导致了同样的失败,但它没有按预期执行。
当我第一次单击用户界面中的开始按钮时,它执行得很好,并且在该过程完成后,当我再次启动时,它不会给我预期的结果。相反,会给我与第一次运行相同的先前结果。我完成这项任务的最合适的方法是什么? 预先感谢:)
每次单击按钮时都会执行以下几行。
private static int jobs = 10;
ExecutorService executor = new PausableThreadPoolExecutor(num_threads, num_threads, 5000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(jobs));
for (int i = 0; i < jobs; i++) {
Runnable worker = new TaskToDo(jobs);
executor.submit(worker);
}
executor.shutdown();
while (!executor.isTerminated()) {}
System.out.println("Finished all threads");
This是我用来实现暂停/恢复的源。
最佳答案
也许 ScheduledThreadPoolExecutor 可以重新启动它 ScheduledThreadPoolExecutor 使用此方法可以返回 ScheduledFuture ScheduledFuture或 future Future保存对任务的引用
ScheduledFuture now = null;
ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(1);
Runnable runner = new Runnable(){
public void run()
{
rollthedice(); //your method or runnable of choice
}
};
启动和重新启动诸如“还有其他方法”之类的内容
now = scheduler.scheduleAtFixedRate(runner, 0, 250, TimeUnit.MILLISECONDS);
取消或停止
now.cancel(true);
now = null;
关于java - 关闭后如何重用ThreadPoolExecutor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27987980/