2011-05-17 57 views
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()); 
} 

我們可以看到,啓動時間(它必須運行的作業的時間)與當前時間(執行作業時的實際時間)不同。

有誰知道爲什麼這麼晚了?

回答

0

忘掉它吧。 現在它似乎工作。我不知道爲什麼,因爲我什麼也沒做。