2012-06-10 14 views
5

मैंने किसी को डेडलॉक से बचने के लिए assert !Thread.holdsLock(lock) का उपयोग करने के लिए देखा।Thread.holdsLock (लॉक) का उद्देश्य क्या है?

इसका उद्देश्य क्या है? यदि लॉक ऑब्जेक्ट किसी अन्य थ्रेड द्वारा आयोजित किया जाता है, तो कोड को तत्काल बाहर निकलने का कारण बताएगा?

+0

आप जावाडोक से क्या समझ में नहीं आता (जैसे विधि :) के लिए तो बहुत अच्छा होता): '' वास्तविक लौटता है यदि और केवल यदि वर्तमान धागा धारण निर्दिष्ट ऑब्जेक्ट पर लॉक मॉनीटर करें।''? –

उत्तर

6

javadoc of the method का कहना है:

रिटर्न true यदि और केवल यदि वर्तमान धागा निर्दिष्ट वस्तु पर नजर रखने ताला रखती है।

(जोर मेरा)

तो, ज़ोर की जाँच करता है कि मौजूदा धागा दिया ताला वस्तु की निगरानी के ताला नहीं रखता है।

ध्यान दें कि आविष्कारों को जांचने के लिए आवेषण का उपयोग किया जाता है, और अक्षम किया जा सकता है। डेडलॉक को रोकने के लिए उनका इस्तेमाल नहीं किया जाना चाहिए। ऐसा करने के लिए एक नियमित if परीक्षण का उपयोग किया जाना चाहिए।

3

assert कीवर्ड का उपयोग बग को पकड़ने के लिए किया जाता है; कार्यक्रम प्रवाह को नियंत्रित करने के लिए इसका कभी भी उपयोग नहीं किया जाना चाहिए। तो या तो यह एक गलतफहमी है या कोई बहुत कुछ गलत कर रहा है।
अधिक संभावना है कि व्यक्ति ने उस कोड सेगमेंट में डेडलॉक खतरे को जोड़ने से डेवलपर्स को रोकने के लिए उस वक्तव्य पर जोर दिया।

इस तरह:

assert !Thread.holdsLock(lock) : 
"Don't call this method while holding the lock." + 
"This method tries to acquire lock2 and that may cause a deadlock."; 
0

Thread.holdsLock(lock) केवल तभी बुला धागा lock मालिक की जाँच करने के लिए है, बस इतना ही।

यह गतिरोध को नहीं रोका जा जाएगा

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