在我的应用程序中,我使用了一个自定义ThreadPoolExecutor,它通过扩展ThreadPoolExecutor
类来启用Executor的暂停和恢复。同样,我希望在执行ExecutorService
的关闭方法后实现重新启动功能。我首先尝试创建ThreadPoolExecutor
的新实例,但它失败了。我找到了this question并尝试了ExecutorCompletionService
,导致同样的失败,但没有按预期执行。
第一次点击我的UI中的开始按钮时,它执行正常,当我再次开始完成该过程后,它不会给我预期的结果。而是会给我与第一次运行相同的先前结果。我能完成这项任务的最佳方式是什么? 在此先感谢:)
每次点击按钮都会执行以下行。
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是我过去暂停/恢复实施的来源。
答案 0 :(得分:0)
也许是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;