gpt4 book ai didi

java - 关闭后如何重用ThreadPoolExecutor

转载 作者:太空宇宙 更新时间:2023-11-04 14:13:49 25 4
gpt4 key购买 nike

在我的应用程序中,我使用了自定义 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com