यह मेरे लिए वास्तव में अजीब है, लेकिन मेरे प्रोग्राम में सभी()/सूचित() विफल होने की तरह दिखता है। कोड बल्कि जटिल है, मूल रूप से मैं तीन धागे ए, बी है, सीजावा - सूचित करें सभी() और सूचित करें() विफल? क्या यह संभव है?
एक अनुरोध भेजता बी और एक 10 सेकेंड का समय समाप्त के साथ अनुरोध पर इंतजार() के लिए, जब बी खत्म, यह सूचित कॉल() को जगाने के लिए अप ए
सी एक डेडलोप में सी एक कतार के माध्यम से ए के लिए कई तारों को खिलाता है, ए उन्हें उठाता है और प्रिंट करता है। प्रत्येक बार जब एक स्ट्रिंग प्रिंट करता है तो यह बी के लिए अनुरोध भेजता है और प्रतीक्षा करता है।
तो कार्यप्रवाह होने के लिए आता है:
सी deadloop में एक खिला रहता
- एक सी से स्ट्रिंग बाहर प्रिंट
- एक अनुरोध भेजता बी और इंतजार (10)
को बी सूचित करें() ......
सी से स्ट्रिंग आउट प्रिंट करता है .... बार-बार ....
यह पहले कुछ सेकंड में काम करता है। हालांकि, थोड़ी देर के बाद मैं देखता हूं कि जब बी प्रिंट करता है कि उसने सूचित किया है() ए, ए अभी भी इंतजार कर रहा है क्योंकि कतार जो सी को फ़ीड करने के लिए उपयोग करती है, जल्दी से बढ़ रही है, और कोई स्ट्रिंग ए द्वारा मुद्रित नहीं होती है। अंत में, 10 सेकेंड के बाद , ए अनुरोध समय समाप्ति शिकायत करता है।
ऐसा लगता है कि अधिसूचना() विफल रही है क्योंकि बी को सूचित करने के बाद संदेश मुद्रित किया गया है()। प्रतीक्षा/उद्धरण जावा की कट्टरपंथी विशेषता है, मुझे विश्वास नहीं है कि यह असफल हो जाएगा। क्या यह संभव है?
क्या आप * निश्चित * ए "अभी भी प्रतीक्षा कर रहे हैं"? दूसरी संभावना यह है कि * * अधिसूचना * के बाद * प्रतीक्षा * शुरू हुई, जो टूटा कोड होगा। (आपको पहले से कुछ ऐसा करने की प्रतीक्षा नहीं करनी चाहिए।) –
शायद बी ने कॉल करने से पहले अधिसूचित किया है –
हम कोड चाहते हैं। – vulkanino