Поток Java для запуска на нескольких таймерах
Я хочу создать своего рода будильник с несколькими будильниками (таймингами), который считает время и уведомляет меня о разных таймингах:
private List<SomeTime> timings; //can also be just the seconds to count
public void run() {
while(counting) {
//if any of the timings is reached do something
for (SomeTime time : timings) {
if(time.equals(System.getTime()) {
triggerEvent();
}
}
Thread.sleep(1000); //wait 1 second
}
}
Теперь это может работать нормально, потому что я проверяю время каждую секунду, что достаточно точно. Но я ищу более элегантное решение, такое как перевод потока в спящий режим, пока не будет достигнут определенный таймер, даже если это будет означать создание другого потока.
Есть ли более элегантное решение, чем это?
1 ответ
Поскольку вы знаете время выполнения, вы можете просто использовать ScheduledExecutionService
ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
Чтобы запланировать задачу:
long currentTimeMs = System.currentTimeMillis();
long delayMs = task.getTime() - currentTimeMs;
ses.schedule(eventRunnable, delayMs, TimeUnit.MILLISECONDS);
Преимущества использования сервиса executor в том, что все ожидающие вещи реализованы под капотом.