मुझे एक डिमन लिखने की आवश्यकता है जो अलग-अलग समय पर जागने वाले धागे की संख्या शुरू करता है। डेमॉन जावा में कॉमन्स अपाचे लाइब्रेरी का उपयोग करके लिखा गया है और इसे लिनक्स मशीन (फेडोरा 13) पर चलाया जाता है। कार्य ए करने के लिए प्रतिदिन एक धागा जागता है जो अनुसूचित के रूप में होता है। लेकिन एक और धागा है जो प्रत्येक सोमवार को सुबह 6 बजे उठकर कुछ कार्य करने के लिए निर्धारित किया जाता है जो निर्धारित समय के अनुसार नहीं होता है। समस्या यह है कि यह धागा वास्तविक निर्धारित समय से बहुत पहले जाग जाता है। यह पिछले रन के पूरा होने के 2 दिन बाद चलता है हालांकि इसे एक हफ्ते के बाद ही चलाना चाहिए। प्रतीक्षा समय की गणना हमारे अपने टाइमर वर्ग का उपयोग करके सही ढंग से की जाती है और क्योंकि यह मौजूदा कोड का पुन: उपयोग करता है, मुझे इसमें कोई समस्या नहीं दिखती है।

यहां क्या समस्या हो सकती थी?

धन्यवाद

2
rcs 18 फरवरी 2011, 22:00
क्या आप समस्याग्रस्त कोड के साथ-साथ टाइमर क्लास भी पोस्ट कर सकते हैं?
 – 
Scott M.
18 फरवरी 2011, 22:03
3
Thread.sleep() कार्य शेड्यूलिंग करने का सही तरीका नहीं है। यदि आप कुछ सेकंड से अधिक समय तक सो रहे हैं, तो आप निश्चित रूप से इसे गलत कर रहे हैं।
 – 
Daniel Pryden
18 फरवरी 2011, 22:09
प्रिडेन - उत्तर के लिए धन्यवाद। मैं सोच रहा था कि क्या Java Timer Thread.sleep का एक अच्छा विकल्प है?
 – 
rcs
18 फरवरी 2011, 22:19
4
क्वार्ट्ज यहां उपयोग करने के लिए सबसे अच्छे उपकरण की तरह लगता है। जावा के लिए यह क्रॉन की तरह है।
 – 
Peter Lawrey
18 फरवरी 2011, 22:21

1 उत्तर

सबसे बढ़िया उत्तर

Thread.sleep() कोई गारंटी नहीं देता है, और यह अपेक्षा से पहले जाग सकता है। आपको इसे हमेशा लूप में उपयोग करना चाहिए:

long curTime = System.currentTimeMillis();

while (wakeUpTime - curTime > 0) {
  try {
    Thread.sleep(wakeUpTime - curTime);
  } catch (InterruptedException ex) { }
  curTime = System.currentTimeMillis();
}
9
mihi 18 फरवरी 2011, 22:31
3
...या उपयुक्त मानक उच्च-स्तरीय अबास्ट्रक्शन में से एक का उपयोग करें ... :-)
 – 
user166390
18 फरवरी 2011, 22:14
@ iluxa- समाधान के लिए धन्यवाद। मुझे इसे आजमाने दो और देखें कि यह काम करता है या नहीं।
 – 
rcs
18 फरवरी 2011, 22:22
कोई रास्ता नहीं है कि यह काम नहीं कर सकता है, क्योंकि सबसे खराब स्थिति में (नींद तुरंत लौट आती है) आप बस व्यस्त प्रतीक्षा को लागू करते हैं।
 – 
Voo
18 फरवरी 2011, 22:51