如何在完成使用ExecutorService后重新运行特定任务

时间:2018-06-07 05:32:49

标签: java multithreading threadpool executorservice

我正在尝试创建一个模块,将Callable提交到ExecutorService并等待响应。如果callable返回null,则此线程将暂停,直到调用resume()为止。否则它将处理结果并再次重新提交相同的任务。

public class ScheduleManager implements Runnable {

    private ExecutorService executor = Executors.newSingleThreadExecutor();

    @Override
    public synchronized void run() {
        while (true) {
            Future<Schedule> future = executor.submit(new ScheduleRetriever());

            try {
                Schedule schedule = future.get();

                if (schedule == null) {
                    this.wait();
                } else {
                    //Do something with the schedule
                }
            } catch (InterruptedException | ExecutionException e) {
                e.printStackTrace();
            }
        }
    }

    public synchronized void resume() {
        this.notifyAll();
    }
}

我设法提出了上述解决方案,但我不确定它的可靠性。

有没有更好地做到这一点?

0 个答案:

没有答案