Я использую SchedulerExecuterService для выполнения задачи после указанной задержки и с заданными интервалами.scheduleAtFixedRate не запускать задачу при указанной задержке
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(taskThread,60 ,120 ,TimeUnit.SECONDS);
Что происходит в первый раз taskThread не запускается после задержки 60 сек, он запускается после задержки более чем на 60 секунд. В то время как следующие казни начинались с правильных интервалов в 120 секунд (не ровно 120 секунд, но есть очень минутная задержка, которую можно игнорировать).
Мой запрос - почему первое исполнение задерживается более 60 секунд? Поскольку задача выполняется потоком, зависит ли время запуска от приоритета потока?
Как я могу запустить его при точной задержке в 60 секунд? Как насчет библиотеки кварца? Будет ли эта библиотека решает мою задачу (запустите работу в определенное время без каких-либо задержек)?
Заранее спасибо.
Что относительно библиотеки кварца? Возможно ли это? – Infotechie
Не связывайтесь с приоритетом потока в JVM, это обычно ухудшает ситуацию. Что касается гарантий в реальном времени, то обычные JVM не работают, но есть специальные JVM, которые делают (но вы не хотите их использовать). –