java Timerクラスのscheduleメソッドについて
24時間に1回(10:00:59を開始時間とする)new Task()処理を定期実行するソースを作成しました。
Calendar Cal = Calendar.getInstance();
Cal.set(Calendar.HOUR_OF_DAY, 10);
Cal.set(Calendar.MINUTE, 00);
Cal.set(Calendar.SECOND, 59);
Timer timer = new Timer();
timer.schedule(new Task(), Cal.getTime(), 86400000);
上記プログラムを数日間稼働させたところ
処理開始時間が10:00:59から次第にずれ始め、10:34:30などに実行されるようになりました。
日によって開始時間がずれることもなければ3,40分ずれる日もあります。
timer.scheduleは定期処理開始時間から24時間(86400000ミリ秒)経過後実施される動きで想定していたため、開始時間そのものがずれる可能性は考慮しておりませんでした。
また、new Task()処理の実行所要時間は開始時間のずれに影響しないものと考えておりました。
「必ず10:00:59に実施させたい」のであればscheduleではなくscheduleAtFixedRateを使用すればいい旨も理解はしておりますが
scheduleを使用した際、開始時間がずれていく原因を特定したいです。
どういった事象が開始時間を遅らせる要因となるか見当がつく方、ご教授いただけませんでしょうか。
0 likes