我正在使用ScheduledThreadPoolExecutor對象調度任務。我使用下面的方法:ScheduledThreadPoolExecutor由於CPU時間差異而執行錯誤的時間
public ScheduledFuture<?> schedule(Runnable command, long delay,TimeUnit unit)
和設置延遲爲30秒(延遲= 30,000和單元= TimeUnit.MILLISECONDS)。有時我的任務會立即發生,其他時間需要70秒。
我相信ScheduledThreadPoolExecutor使用CPU特定的時鐘。當我運行比較System.currentTimeMillis的(),System.nanoTime()[其爲CPU具體]試驗我看到以下
時間表:1272637682651ms,7858346157228410ns
執行:1272637682667ms,7858386270968425ns
差16毫秒但4011374001ns(或40,113ms)
,所以它看起來像有40秒
兩款CPU時鐘之間的矛盾如何解決這個問題,我n java代碼?不幸的是,這是一臺客戶機,我無法修改他們的系統。
棘手的一個。也許'java.util.Calendar'會有幫助嗎? Calendar.getInstance()等等。 – 2010-04-30 16:00:37
你是否在虛擬機(VMWare,KVM,Virtual PC)上運行此代碼?即使在毫秒級別,虛擬化也會對CPU時鐘造成嚴重破壞。 – 2010-05-01 07:17:17
它直接在Windows XP Profession機器上運行。沒有虛擬化。 – richs 2010-05-03 13:13:51