1
我正在處理一小段具有ScheduledExecutorService的代碼。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必須當我們到達一個時間戳我執行。 問題是,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());
}
我們可以看到,啓動時間(它必須運行的作業的時間)與當前時間(執行作業時的實際時間)不同。
有誰知道爲什麼這麼晚了?