की वजह से एक गलत समय क्रियान्वित मैं एक ScheduledThreadPoolExecutor वस्तु का उपयोग कर एक काम का समय निर्धारण कर रहा हूँ। मैं निम्न विधि का उपयोग:ScheduledThreadPoolExecutor CPU समय विसंगति
public ScheduledFuture<?> schedule(Runnable command, long delay,TimeUnit unit)
और 30 सेकंड (देरी = 30,000 और इकाई = TimeUnit.MILLISECONDS) करने के लिए देरी निर्धारित किया है। कभी-कभी मेरा कार्य तुरंत होता है और दूसरी बार इसमें 70 सेकंड लगते हैं।
मेरा मानना है कि ScheduledThreadPoolExecutor सीपीयू विशिष्ट घड़ियों का उपयोग करता है। जब मैं System.currentTimeMillis(), System.nanoTime() [जो CPU विशिष्ट है] की तुलना परीक्षण चलाने मैं निम्नलिखित
अनुसूची देखें: 1272637682651ms, 7858346157228410ns
निष्पादित करें: 1272637682667ms, 7858386270968425ns
का अंतर है 16ms लेकिन 4011374001ns (या 40,113ms)
तो यह लग रहा है 40 सेकंड
के दो सीपीयू घड़ियों के बीच विसंगति मैं कैसे इस समस्या को हल करना है की तरह मैं एन जावा कोड? दुर्भाग्य से यह एक ग्राहक मशीन है और मैं अपने सिस्टम को संशोधित नहीं कर सकता।
ट्रिकी एक। शायद 'java.util.Calendar' मददगार होगा? कैलेंडर.getInstance() और बहुत आगे .. –
क्या आप इस कोड को एक वायरल मशीन (वीएमवेयर, केवीएम, वर्चुअल पीसी) पर चला रहे हैं? वर्चुअलाइजेशन, मिलीसेकंद स्तर पर भी CPU घड़ी के साथ विनाश का कारण बन सकता है। –
यह सीधे एक विंडोज एक्सपी पेशे मशीन पर चल रहा है। कोई वर्चुअलाइजेशन नहीं – richs