मैं इस सरल कोड का टुकड़ा:ScheduledThreadPoolExecutor हो रही देर से
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(10);
Runnable r = new Runnable() {
@Override
public void run() {
System.err.println(Calendar.getInstance().getTime());
}
};
exec.scheduleAtFixedRate(r,0, 500, TimeUnit.MILLISECONDS);
}
एक मशीन पर, इस कोड अपेक्षित ढंग से चलाता है। कंसोल आउटपुट:
- मंगल जुला 03 10:32:34 EEST 2012
- मंगल जुला 03 10:32:34 EEST 2012
- मंगल जुला 03 10:32:35 EEST 2012
- मंगल जुला 03 10:32:35 EEST 2012
- मंगल जुला 03 10:32:36 EEST 2012
- मंगल जुला 03 10:32:36 EEST 2012 ...
हालांकि किसी अन्य मशीन पर, कंसोल पर टाइमस्टैम्प दिखाता है शेड्यूल किए गए थ्रेडपूलएक्सएटर को देर हो रही है। देर हो रही करके मैं सेकंड के एक जोड़े :)
- मंगल जुला 03 10:32:34 EEST 2012
- मंगल जुला 03 10:32:37 EEST 2012
- मंगल जुला 03 10:32 मतलब है: 40 EEST 2012
- मंगल जुला 03 10:32:44 EEST 2012
- मंगल जुला 03 10:32:50 EEST 2012
- मंगल जुला 03 10:32:55 EEST 2012 ...
विवरण:
i3 विंडोज 7 64 बिट JRE 1.6.0.30
दूसरी मशीन का विवरण जो शेड्यूलिंग पर देरी से चल रही:
डुअल कोर Windows XP 32 बिट जेआरई 1.6.0.18
मुझे आश्चर्य है कि ऐसा अंतर क्यों है। कोई सुझाव ?
अग्रिम धन्यवाद।
क्या आप पर्यावरण (ओएस, जेवीएम) के बारे में अधिक जानकारी दे सकते हैं? – assylias
शेड्यूलिंग देरी करने के लिए ओएस लेवल सिस्टम कॉल का उपयोग करती है, इसलिए यदि यह गलत है, तो आपके पास निम्न स्तर की समस्या है। –
आप कम से कम दो होस्टों के कुल CPU उपयोग शामिल कर सकते हैं। –