Мне нужно выполнять реализацию Runnable с интервалами времени, которые могут постоянно меняться и настраиваются другим потоком. Могу ли я добиться этого с помощью SchedulerExecutorService и ScheduleWithFixedDelay? Будет делать это:
ThreadScheduler = backgroundExecutors.scheduleWithFixedDelay(refreshFunc, 5, refreshRate, TimeUnit.SECONDS);
проверить значение переменной refreshRate и соответствующим образом адаптировать?
Я не хочу переводить поток в спящий режим с помощью такой переменной:
Thread.sleep(variable);
Я был бы благодарен всем, кто может предоставить некоторую полезную информацию здесь.
РЕДАКТИРОВАТЬ: я перефразирую свой вопрос. Если мне нужно изменить временной интервал, связанный с scheduleWithFixedDelay, возможно ли это, когда выполнение задачи выполняется.
РЕДАКТИРОВАТЬ 2:
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);
ScheduledFuture scheduledFuture;
Runnable foo = new Runnable() {
public void run() {
doSomething();
}
}
while (true) {
scheduledFuture = scheduledExecutorService.schedule(foo, refreshRate, TimeUnit.SECONDS);
scheduleFuture.cancel();
}
Обратите внимание, что RefreshRate постоянно меняется. Будет ли это работать?
РЕДАКТИРОВАТЬ 3:
ScheduledExecutorService scheduleExecutorService = Executors.newScheduledThreadPool(5);
ScheduleFuture scheduledFuture;
Runnable foo = new Runnable() {
public void run() {
doSomething();
}
scheduledFuture.cancel():
scheduleFuture = scheduledExecutorService.schedule(foo, refreshRate, TimeUnit.SECONDS);
}
scheduleFuture = scheduledExecutorService.schedule(foo, refreshRate, TimeUnit.SECONDS);
enter code here
Так это то, что вы предлагаете?
Future
, возвращенное операциейscheduleXXX
, иcancel()
его. Теперь запланируйте новую задачу с новым интервалом. - person Boris the Spider   schedule 07.05.2014