Доброе утро,
Я хочу запустить запланированный поток, который генерирует новое случайное число при каждом выполнении, а затем использует это новое число в качестве интервала перед повторным запуском. Ранее я использовал примерно следующий код для выполнения потока, работающего с регулярным запланированным интервалом:
public void start() {
long delay = 5;
final Runnable g = () -> {
delay = (long)(50 * (Math.random()+0.1));
thingDoer.doAwesomeThings();
};
final ScheduledFuture<?> passerbyGenerator = schedule.scheduleAtFixedRate(g, 1, delay,
TimeUnit.MILLISECONDS);
}
Я никогда не пытался сделать это без фиксированного интервала. Я знаю, что у меня выше не получится. Во-первых, последняя строка кода устанавливает расписание и выполняется только один раз. Во-вторых, похоже, что я не могу использовать изменяющуюся переменную внутри запланированного потока. Я получаю следующую ошибку: «Задержка локальной переменной, определенная во включающей области, должна быть окончательной или фактически окончательной».
Как я могу запустить поток, который делает то, что я хочу делать? Другими словами, как я могу настроить звуковой сигнал, который издает нерегулярные интервалы?