यहाँ() एक मामले में जहां एक धागा सूचित इंतज़ार कर रहा है या टाइमआउट है। यहां थोड़ी देर लूप को नकली जागने के लिए जोड़ा जाता है।जावा: कैसे प्रतीक्षा में नकली Wakeup और समय समाप्ति के बीच अंतर करना()
boolean dosleep = true;
while (dosleep){
try {
wait(2000);
/**
* Write some code here so that
* if it is spurious wakeup, go back and sleep.
* or if it is timeout, get out of the loop.
*/
} catch (InterruptedException e) {
e.printStackTrace();
}
}
इस मामले में मैं एक नकली जागने और समय के बीच अंतर कैसे कर सकता हूं? यदि यह एक नकली जागृत है, तो मुझे वापस जाने और प्रतीक्षा करने की आवश्यकता है। और यदि यह एक टाइमआउट है, तो मुझे लूप से बाहर निकलना होगा।
मैं आसानी से,() को सूचित करने के मामले की पहचान क्योंकि मैं dosleep चर की स्थापना की जाएगी करने के लिए झूठी जबकि सूचित() कॉल कर सकते हैं।
संपादित करें: मैं 1.4 जावा संस्करण का उपयोग कर रहा हूँ, एम्बेडेड परियोजना आवश्यकता की वजह से। मैं Condition
का उपयोग नहीं कर सकता क्योंकि यह केवल 1.5 पोस्ट उपलब्ध है।
अग्रिम धन्यवाद।
ब्रिंगर 128 का एक उचित समाधान है, लेकिन, मैं सवाल करता हूं कि आप ऐसा क्यों करना चाहते हैं। इंटरप्ट आमतौर पर "नकली जागरूकता" नहीं होता है, यह प्रक्रिया को बाधित करने और _stop_ प्रक्रिया के संकेत है। – user949300
यह बाधा के बारे में नहीं है। एक "नकली wakeupup" किसी भी समय आ सकता है। अगर मैं प्रतीक्षा() में प्रवेश करने के बाद एक ही समय में आता हूं, तो मैं लूप से बाहर निकलना नहीं चाहता हूं। मुझे यह देखने की ज़रूरत है कि मैं लूप –
से बाहर निकलने से पहले मैं समय-समय पर 'टाइमआउट' समय प्रतीक्षा करता हूं। आप बाधित नहीं हो रहे हैं, लेकिन कुछ अन्य थ्रेड अधिसूचना() को सूचित करते हैं, या अधिक संभावना है, सभी को सूचित करें(), और आप जागृत हो जाते हैं। – user949300