Поток 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 в том, что все ожидающие вещи реализованы под капотом.

Другие вопросы по тегам