मान लीजिए कि मेरे पास एक धागा है जो किसी अन्य थ्रेड द्वारा उत्पादित वस्तुओं का उपभोग करता है। अपनी दौड़ विधि inQueue एक BlockingQueueकिस स्थिति के तहत BlockingQueue.take अवरोध अपवाद फेंक देगा?
boolean shutdown = false;
while (!shutdown) {
try {
WorkItem w = inQueue.take();
w.consume();
} catch (InterruptedException e) {
shutdown = true;
}
}
किया जा रहा है इसके अलावा, एक अलग धागा इस चल धागा दखल से कोई और अधिक काम आइटम देखते हैं कि संकेत देंगे साथ, इस प्रकार है। अगर (अगले कार्य आइटम को पुनः प्राप्त करने के लिए ब्लॉक करने की आवश्यकता नहीं है तो एक बाधित अपवाद फेंक देगा)। यानी अगर निर्माता सिग्नल करता है कि यह कार्य कतार भर रहा है, तो क्या यह गलती से कुछ वस्तुओं को अंदर छोड़कर या बाधा को याद करना संभव है?
आपको लगभग सही मिला है। * उपभोक्ता * सेट "शट डाउन" को बाधा पर सच होने के बजाय, इसके बजाय * निर्माता * उपभोक्ता को बाधित करने से पहले इसे सही पर सेट करें। ध्यान दें ए) एक सेंटीनेल वैल्यू ("जहर गोली") से बचकर चीजों को सुंदर रखता है, बी) नकली वेकअप को सही ढंग से संभालता है, और सी) अधिक सामान्य है कि आप जानबूझकर उपभोक्ता को रोक सकते हैं कि कतार खाली है या नहीं। – user359996