如何在关机后重用ThreadPoolExecutor

时间:2015-01-16 16:03:30

标签: java multithreading threadpool

在我的应用程序中,我使用了一个自定义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是我过去暂停/恢复实施的来源。

1 个答案:

答案 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;