2011-12-25 3 views
1

Я использую EJB3.1 TimerService для планирования таймеров на Java.TimerService: есть ли способ предотвратить запуск 2 экземпляров одновременного таймера?

Есть ли общий способ предотвратить запуск 2 одновременных экземпляров таймера? Допустим, мой таймер срабатывает каждые 5 минут. Если по какой-то причине таймер запустился в 5:00 и закончил работу в 5:07, я хочу бежать в следующий раз в 5:12 (или в 5:10, просто пропустите таймаут в 5:05). Есть ли простой/встроенный способ сделать это?

спасибо

ответ

1

Просто процесс перепланировать себя по завершении, а не планировать их все сразу.

В качестве альтернативы, вы можете иметь общий семафор, который блокирует одно задание, пока выполняется другое задание. Если это редкость для работы, чтобы остановить пять минут, это простое решение. Если это не редкость, тогда задания будут складываться и синхронизироваться, так как таймер будет продолжать запускать знакомые задания, даже если они уже заблокированы.

+0

Спасибо. Я думал, что, возможно, я могу использовать информацию из TimerService.getTimers(), но не нашел, как это сделать. Вероятно, я пойду с решением семафора (например, статическим переменным флагом), если я не найду ничего встроенного. – lili

+0

Вместо того, чтобы катать собственный семафор, вы можете использовать синглтон. По умолчанию параллелизм, управляемый контейнером, с методами записи будет работать для метода Timeout или Schedule. –

+0

Я не могу использовать singleton, потому что у меня может быть несколько экземпляров (экземпляр на пользователя) – lili