Bir ScheduledThreadPoolExecutor nesnesini kullanarak bir görev zamanlama yapıyorum. Aşağıdaki yöntemi kullanın:ScheduledThreadPoolExecutor CPU zaman tutarsızlığı nedeniyle yanlış bir zaman yürütme
public ScheduledFuture<?> schedule(Runnable command, long delay,TimeUnit unit)
ve 30 saniye (gecikme = 30,000 birim = TimeUnit.MILLISECONDS) gecikme ayarlayın. Bazen görevim hemen gerçekleşir ve diğer zamanlarda 70 saniye sürer.
ScheduledThreadPoolExecutor'ın CPU'ya özel saat kullandığını düşünüyorum. ı [işlemci özgüdür] System.currentTimeMillis(), System.nanoTime() karşılaştırma testleri zaman ı aşağıdaki
zamanlama bakınız: 1272637682667ms
fark 7858386270968425ns: 1272637682651ms,
yürütmek 7858346157228410ns Nasıl bu sorunu çözebilirim 40 saniye
iki işlemci saatler arasında tutarsızlık bulunuyor gibi 16 ms ama 4011374001ns (veya 40,113ms)
yüzden görünüyor i java kodu? Ne yazık ki bu bir müşteri makinesi ve sistemlerini değiştiremiyorum.
Zor olanı. Belki de java.util.Calendar' yardımcı olur? Calendar.getInstance() ve benzeri .. –
Bu kodu bir Virual Machine'de çalıştırıyor musunuz (VMWare, KVM, Virtual PC)? Sanallaştırma, işlemci saati ile milisaniye seviyesinde bile zarar verebilir. –
Doğrudan bir Windows XP Mesleki makinesinde çalışıyor. Sanallaştırma yok. – richs