2012-02-11 5 views
5

जब दो धागे एक ही ऑब्जेक्ट के लॉक को हासिल करने का प्रयास करते हैं तो उन चीजों को क्या तय किया जाता है, जिन पर यह तय किया जाता है कि लॉक को किस धागे पर रखा जाना चाहिए।क्या निर्धारित करता है कि दो प्रतिस्पर्धी धागे लॉक प्राप्त करते हैं?

उत्तर

4

Java documentation for notify() के अनुसार:

किसी एकल थ्रेड कि इस वस्तु के मॉनीटर पर इंतज़ार कर रहा है जाग। यदि इस ऑब्जेक्ट पर कोई भी थ्रेड प्रतीक्षा कर रहा है, तो उनमें से एक को जागृत करने के लिए चुना गया है। पसंद मनमानी है और कार्यान्वयन के विवेकाधिकार पर होता है। एक थ्रेड प्रतीक्षा विधियों के पर कॉल करके किसी ऑब्जेक्ट की मॉनिटर पर प्रतीक्षा करता है।

तो अगर आप का उपयोग synchronized(obj){} आप मूल रूप से कोई नियंत्रण नहीं है जिस पर धागा obj पर ताला प्राप्त करेंगे है, और आप किसी भी धारणा नहीं कर सकता। यह शेड्यूलर पर निर्भर करता है।

यदि आप निष्पक्षता चाहते हैं (यानी, ताला प्राप्त करने वाला अगला धागा कतार में पहला है), तो ReentrantLock पर एक नज़र डालें: इसमें एक बुलियन ध्वज है जो निर्दिष्ट करने के लिए कि आप निष्पक्षता को लागू करना चाहते हैं।

+0

धन्यवाद हो सकता है। साथ ही, ऐसा लगता है कि सिंक्रनाइज़ (ओबीजे) ब्लॉक प्रतीक्षा करता है() भी, क्या आप सिंक्रनाइज़ किए गए ब्लॉक या विधियों के पहले, उसके दौरान और बाद में किए गए कार्यों की श्रृंखला को रेखांकित कर सकते हैं – itsraja

+0

आपका क्या मतलब है? एल्गोरिदम कोड के टुकड़े पर पारस्परिक बहिष्करण सुनिश्चित करने के लिए प्रयोग किया जाता है? या शेड्यूलिंग एल्गोरिदम? पूर्व के लिए, केवल अवधारणात्मक रूप से, आप पीटरसन के एल्गोरिदम पर एक नज़र रखना चाहेंगे: https://en.wikipedia.org/wiki/Peterson's_algorithm। बाद के लिए, इस पर चर्चा की गई है: http://stackoverflow.com/questions/2816011/what-is-the-jvm-scheduling-algorithm –

+0

धन्यवाद। मेरा मतलब जावा के तरीकों के संदर्भ में पारस्परिक बहिष्कार था। प्रतीक्षा करें(), सूचित करें() ... मुझे 1 ऑब्जेक्ट की कोशिश कर रहे 2 धागे के लिए अनुरूपित इन फ़ंक्शन कॉल का अनुक्रम देखने में खुशी होगी। अरे यह 1 लड़की (या अधिक) लड़कों के समान है जो 1 लड़की का प्रस्ताव है। वे इसे wedlock कहते हैं;) – itsraja

0

Java Oracle Docs के अनुसार:

इस वर्ग के लिए निर्माता एक वैकल्पिक निष्पक्षता पैरामीटर स्वीकार करता है। जब सत्य सेट किया जाता है, विवाद के तहत, ताले सबसे लंबे समय तक प्रतीक्षा धागे तक पहुंच प्रदान करने का पक्ष लेते हैं। अन्यथा यह ताला किसी भी विशेष पहुंच आदेश की गारंटी नहीं देता है।

यदि आप निष्पक्षता की अनुमति दे रहे हैं तो फीफो (प्रथम-प्रथम-प्रथम) का उपयोग किया जाता है, अन्यथा यह यादृच्छिक लगता है (मेरे अवलोकनों से)।

+0

आप मानते हैं कि वह ReentrantLock का उपयोग करता है ... उसने केवल "एक ही ऑब्जेक्ट पर लॉक के लिए प्रतिस्पर्धा करने वाले धागे" कहा, जो कि कोई ऑब्जेक्ट IMHO –

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