ScheduledExecutorService несколько раз задерживает - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть задача, которую я хочу выполнить, где задержка будет постоянно меняться (т.е. - без фиксированного интервала).

Мне нужен поток и бесконечные циклы, которые находят значение задержки, вводят ее в исполнитель, а затем, как только эта задача завершается, находят новое значение задержки и т. Д.

Моя текущая «базовая» реализация:

long targetTime = findNextTime()/1000;
long currentTime = System.curentTimeMillis()/1000;

delay = targetTime - currentTime;

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(3);

Runnable task = new Runnable() {

    public void run() {
        System.out.println("Test Task");

        ScheduledFuture<?> future = scheduler.schedule(this, delay, TimeUnit.SECONDS);
    }
}

Как мне найти новую задержку и повторять эту задачу?

Должен ли я сделать опрос на future, а затем выполнить рекурсивный цикл? Я пробую это, и я получаю ошибку.

1 Ответ

0 голосов
/ 01 апреля 2019

Есть некоторые ответы для решения этой проблемы. Реинициализируйте задержку исправления в ScheduledExecutorService и Как изменить @Scheduled fixedDelay в Spring во время выполнения

здесь я поддерживаю другой метод для реализации этой повторяющейся задачи отправки ExecutorService

class Task implements Runnable {
    private static Random random = new Random();
    private ExecutorService executor;

    public Task(ExecutorService executor) {
        this.executor = executor;
    }

    @Override
    public void run() {
        try {
            System.out.println(System.currentTimeMillis() + "   Hello World");
            TimeUnit.MILLISECONDS.sleep(random.nextInt() % 100);
            executor.execute(this);
        } catch (Exception e) {

        }
    }
}
...