Подтвердить что ты не робот

Как использовать ScheduledExecutorService в java для вызова реализации Callable с фиксированным интервалом?

ScheduledExecutorService имеет такие методы, как scheduleAtFixedRate (Runnable command, long initialDelay, long period, TimeUnit unit) для вызова классов Runnable с фиксированными интервалами. Я хочу, чтобы мой поток возвращал некоторое значение после выполнения. Поэтому я реализовал интерфейс Callable. Я не мог найти эквивалентный метод для вызова моего класса Callable с регулярным интервалом. Есть ли другой способ реализовать это? Если это функциональность не предоставляется Java, какова рациональность этого решения? Пожалуйста, дайте мне знать. Спасибо.

4b9b3361

Ответ 1

Вы не можете планировать Callable для периодического выполнения, так как неясно, как вернуть результат из такого выполнения.

Если у вас есть собственный подход к возврату результата (например, поместить результат в очередь), вы можете обернуть Callable в Runnable и реализовать свой подход:

final BlockingQueue<Result> q = new ArrayBlockingQueue<Result>();
final Callable<Result> action = ...;

s.scheduleAtFixedRate(new Runnable() {
    public void run() {
        q.put(action.call());
    }
}, ...);