我正在编写一小段具有 ScheduledExecutorService 的代码。
为此,我有以下代码:
Calendar fileTimestamp = Calendar.getInstance(); fileTimestamp.setTime(fileObj.getDateToCopy());
ScheduledExecutorService fileDispatcher = Executors.newScheduledThreadPool(5);
CopyTask copyTask = new CopyTask();
long schedulerTrigger = fileTimestamp.getTimeInMillis() - Calendar.getInstance().getTimeInMillis();
System.out.println("***[MAIN-INFO]["+fileObj.getFile_id()+"] fileTimeStamp:"+fileTimestamp.getTime());
System.out.println("***[MAIN-INFO]["+fileObj.getFile_id()+"] now
TimeStamp:"+Calendar.getInstance().getTime());
System.out.println("[MAIN-INFO]["+fileObj.getFile_id()+"]
scheduledTrigger [hh:mm:ss]:
"+formatDateDiff(schedulerTrigger) );
ScheduledFuture<?> result = fileDispatcher.schedule(copyTask,
schedulerTrigger, TimeUnit.MILLISECONDS);
当我们到达时间戳时,必须执行复制任务。 问题是copyTask执行得很晚:每次大约延迟3分钟。 以下消息:
***[MAIN-INFO][401850] fileTimeStamp:Tue May 17 17:09:38 CEST 2011
***[MAIN-INFO][401850] now TimeStamp:Tue May 17 17:07:38 CEST 2011
[MAIN-INFO][401850] scheduledTrigger [hh:mm:ss]: 0:2:0 (120000 ms)
正在运行的任务的消息:
[401850-INFO] Launch time:Tue May 17 17:09:38 CEST 2011
[401850-INFO] Current time:Tue May 17 17:12:04 CEST 2011
[401850-INFO] Start copying FILE_ID=401850
[401850-INFO] Copy file OK
目前我在 CopyTask 中有以下代码:
public void run() {
System.out.println("["+taskId+"-INFO] Current time:"+new Date());
}
我们可以看到,启动时间(作业必须运行的时间)与当前时间(作业执行的实际时间)并不相同。
有人知道为什么这么晚吗?
最佳答案
忘记它吧。 现在看来有效了。我不知道为什么,因为我什么也没做。
关于java - ScheduledExecutorService 每次都开始晚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6033145/