2015-06-05 10 views
5

के अंदर अपवाद फेंकता है, तो कई थ्रेड महत्वपूर्ण खंड तक पहुंचने का प्रयास कर रहे हैं, एक थ्रेड जो होता है, सिंक्रनाइज़ किए गए ब्लॉक के अंदर अपवाद होता है जिसमें यह प्रतीक्षा() और सूचित() को लॉक करने और रिलीज़ करने के लिए होता है ।क्या होगा यदि थ्रेड सिंक्रनाइज़ ब्लॉक

+0

यह यहां उत्तर है, http://stackoverflow.com/questions/12521776/what-happens-to-the-lock-when-thread-crashes-inside-a-synchronized-block और http: // stackoverflow.com/questions/2019339/side-effects-of-throwing-an-exception-inside-a-synchronized-clause –

+0

@KennethClark \t क्या होगा कि लॉक मैन्युअल रूप से जारी नहीं किया गया था। यदि कोई मृत ताले बनाता है –

+0

लॉक सभी मामलों में समाप्त होने की गारंटी है –

उत्तर

7

सिंक्रनाइज़ेशन मॉनीटर जारी किया जाएगा: "यदि शरीर का निष्पादन कभी पूरा हो जाता है, या तो सामान्य रूप से या अचानक, उसी मॉनीटर पर अनलॉक कार्रवाई स्वचालित रूप से की जाती है।" जावा भाषा विशिष्टता 17.1. Synchronization

अन्य धागे सिंक्रनाइज़ करना जारी रखने में सक्षम होंगे, और प्रतीक्षा और सूचित करेंगे।

यदि अपवाद के साथ धागा कुछ महत्वपूर्ण प्रोग्राम तर्क संसाधन धारण कर रहा है, तो आपको इसे जारी करने के लिए प्रयास करने की आवश्यकता हो सकती है।

0

जैसा कि बताया गया है कि कोई अपवाद होता है तो इसे निष्पादन जारी रखने के लिए संभाला/फेंक दिया जाना चाहिए या अन्य निष्पादन बंद हो जाएगा। तो, यह आपके परिदृश्य में समान है यदि कोई अपवाद होता है तो इसे संभाला जाएगा और आगे लॉक जारी किया जाएगा।

+0

क्या होगा कि लॉक मैन्युअल रूप से रिलीज़ नहीं हुआ था। यदि कोई मृत ताले बनाता है –

+0

आम तौर पर, हमें मृत ताले की संभावना से बचने के लिए सभी परिदृश्यों का ख्याल रखना चाहिए। यदि कोई मृत ताला लगाया जाता है तो हम एप्लिकेशन को पुनरारंभ करने के अलावा हमारे अंत से कुछ भी नहीं कर सकते हैं। डेडलॉक्स से बचने के लिए मैं आपको "जावा में इंटर-थ्रेड संचार" के बारे में पढ़ने का सुझाव देता हूं। –

+0

@ विश्वनाथ डी ठीक है –

0

शायद आप संसाधनों (कनेक्शन, I/O) जैसे ताले के बारे में सोच रहे हैं लेकिन जैसे ही निष्पादन थ्रेड महत्वपूर्ण अनुभाग की निकास सीमा तक पहुंचता है (मॉनीटर/सिंक्रनाइज़ ब्लॉक बंद करने वाले कोष्ठक तक पहुंचता है)) अपवाद को फेंकने के बावजूद।

देखें: synchronized statement

ब्लॉक के निष्पादन के किसी भी कारण से अचानक पूरा करता है, तो मॉनिटर अनलॉक हो और सिंक्रनाइज़ बयान इसी कारण अचानक पूरा करती है।

+0

तब लॉक स्वचालित रूप से रिलीज़ हो जाएगा –

+0

हां, अपवाद के मामले में मॉनीटर अनलॉक हो गया है और 'सिंक्रनाइज़' कथन अचानक समाप्त हो जाता है जिससे लॉक (मॉनिटर) जारी हो जाता है। –

संबंधित मुद्दे