java - 关闭后如何重用ThreadPoolExecutor

标签 java multithreading threadpool

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

相关文章:

c - 停止线程池运行的好方法是什么?

java - 转换为同一对象时出现 ClassCastException

wpf - 请帮助我了解WPF的UI线程

java - 如何编写一个 equals 方法来比较一个团队与另一个团队?

java - 为什么这会抛出 InterruptedException?

python - 检测线程何时在 python 应用程序中运行?

java - 有没有办法配置jboss在线程执行结束时清除ThreadLocal变量?

java - 是否有一个 Java 线程池对象可以在可用内核之间自动对线程进行负载平衡,或者这是由 JVM 为您完成的?

java - 用 Java 创建宾果卡

java - 如何使用多个 POJO 更新数据库中的同一个表?