मुझे एक डिमन लिखने की आवश्यकता है जो अलग-अलग समय पर जागने वाले धागे की संख्या शुरू करता है। डेमॉन जावा में कॉमन्स अपाचे लाइब्रेरी का उपयोग करके लिखा गया है और इसे लिनक्स मशीन (फेडोरा 13) पर चलाया जाता है। कार्य ए करने के लिए प्रतिदिन एक धागा जागता है जो अनुसूचित के रूप में होता है। लेकिन एक और धागा है जो प्रत्येक सोमवार को सुबह 6 बजे उठकर कुछ कार्य करने के लिए निर्धारित किया जाता है जो निर्धारित समय के अनुसार नहीं होता है। समस्या यह है कि यह धागा वास्तविक निर्धारित समय से बहुत पहले जाग जाता है। यह पिछले रन के पूरा होने के 2 दिन बाद चलता है हालांकि इसे एक हफ्ते के बाद ही चलाना चाहिए। प्रतीक्षा समय की गणना हमारे अपने टाइमर वर्ग का उपयोग करके सही ढंग से की जाती है और क्योंकि यह मौजूदा कोड का पुन: उपयोग करता है, मुझे इसमें कोई समस्या नहीं दिखती है।
यहां क्या समस्या हो सकती थी?
धन्यवाद
1 उत्तर
Thread.sleep() कोई गारंटी नहीं देता है, और यह अपेक्षा से पहले जाग सकता है। आपको इसे हमेशा लूप में उपयोग करना चाहिए:
long curTime = System.currentTimeMillis();
while (wakeUpTime - curTime > 0) {
try {
Thread.sleep(wakeUpTime - curTime);
} catch (InterruptedException ex) { }
curTime = System.currentTimeMillis();
}
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।
Thread.sleep()
कार्य शेड्यूलिंग करने का सही तरीका नहीं है। यदि आप कुछ सेकंड से अधिक समय तक सो रहे हैं, तो आप निश्चित रूप से इसे गलत कर रहे हैं।