Как использовать ScheduledExecutorService в java для вызова реализации Callable с фиксированным интервалом?
ScheduledExecutorService имеет такие методы, как scheduleAtFixedRate (Runnable command, long initialDelay, long period, TimeUnit unit) для вызова классов Runnable с фиксированными интервалами. Я хочу, чтобы мой поток возвращал некоторое значение после выполнения. Поэтому я реализовал интерфейс Callable. Я не мог найти эквивалентный метод для вызова моего класса Callable с регулярным интервалом. Есть ли другой способ реализовать это? Если это функциональность не предоставляется Java, какова рациональность этого решения? Пожалуйста, дайте мне знать. Спасибо.
Ответы
Ответ 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());
}
}, ...);