Как повторно запустить определенную задачу после ее завершения с помощью ExecutorService - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь создать модуль, который отправит Callable на ExecutorService и ожидает ответа.Если вызываемый возвращает 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();
    }
}

Мне удалось найти решение, описанное выше, но я не уверен, что его надежность.

Есть ли что-то еще сделатьэто лучше?

...