जावा में किसी वस्तु के मॉनिटर का अर्थ क्या है? इस शब्द का उपयोग क्यों करें?


87

जावा थ्रेड्स के बारे में लेख पढ़ते समय, मैं अक्सर अभिव्यक्ति पर ध्यान देता हूं: "वर्तमान धागा इस ऑब्जेक्ट के मॉनिटर का मालिक है"। मुझे अर्थ मिलता है: धागे को ऑब्जेक्ट पर संचालित करने का अधिकार मिलता है। लेकिन मैं हैरान हूं कि हम "ऑब्जेक्ट के लॉक" के बजाय "ऑब्जेक्ट के मॉनिटर" वाक्यांश का उपयोग क्यों करते हैं?

संक्षेप में, मुझे पता नहीं है कि 'मॉनीटर' शब्द का अर्थ क्या है, सवाल अजीब और सरल हो सकता है। लेकिन मैं चाहता हूं कि कोई भी इसे हल करने में मदद कर सकता है। 3ks


1
+1 @ulmangt वास्तव में आपके प्रश्न का उत्तर देने के लिए एक ही है: हम उन्हें "मॉनिटर" कहते हैं, क्योंकि होरे ने उन्हें 1974 में वापस बुलाया था।
सोलोमन स्लो

जवाबों:


52

लेकिन मैं हैरान हूं कि "ऑब्जेक्ट का मॉनीटर" शब्द "ऑब्जेक्ट लॉक" के इंस्टेंड का उपयोग क्यों करें?

लिंक के लिए उलमांग का उत्तर देखें जो इस संदर्भ में उपयोग किए गए शब्द "मॉनिटर" की व्याख्या करते हैं। ध्यान दें कि:

"मॉनिटर का आविष्कार प्रति ब्रिंच हेन्सन और कार होरे द्वारा किया गया था, और पहली बार ब्रिंच हेन्सन के समवर्ती पास्कल भाषा में लागू किया गया था।"

(स्रोत: विकिपीडिया )

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

  • एक "लॉक" कुछ लॉक गुणों को बनाए रखने वाले आदिम अधिग्रहण और रिलीज के साथ कुछ है; उदा। अनन्य उपयोग या एकल लेखक / एकाधिक पाठक।

  • एक "मॉनीटर" एक ऐसा तंत्र है जो यह सुनिश्चित करता है कि किसी भी समय किसी भी अनुभाग को कोड के किसी दिए गए अनुभाग (या अनुभाग) को निष्पादित किया जा सकता है। इसे एक लॉक (और "कंडीशन वैरिएबल" का उपयोग करके लागू किया जा सकता है जो थ्रेड्स प्रतीक्षा करने या अन्य थ्रेड्स को सूचनाएं भेजने की अनुमति देता है जो स्थिति पूरी हो गई है), लेकिन यह सिर्फ एक लॉक से अधिक है। दरअसल, जावा मामले में, मॉनिटर द्वारा उपयोग किया जाने वाला वास्तविक लॉक सीधे पहुंच योग्य नहीं है। (आप अन्य थ्रेड को प्राप्त करने से रोकने के लिए "Object.lock ()" नहीं कह सकते ... जैसे आप जावा Lockउदाहरण के साथ कर सकते हैं ।)

संक्षेप में, यदि कोई पांडित्यपूर्ण "मॉनीटर" होता है, तो वास्तव में जावा जो प्रदान कर रहा है, उसे चिह्नित करने के लिए "लॉक" से बेहतर शब्द है। लेकिन व्यवहार में, दोनों शब्दों का प्रयोग लगभग एक-दूसरे से किया जाता है।


22

एक मॉनिटर बस एक वस्तु के लिए एक शब्द है, जिसके तरीकों को बहुपरत वातावरण में सुरक्षित रूप से उपयोग किया जा सकता है।

मॉनिटर्स पर एक शानदार विकिपीडिया लेख है:

http://en.wikipedia.org/wiki/Monitor_(synchronization)

यदि आप नीचे स्क्रॉल करते हैं, तो यह जावा के बारे में भी स्पष्ट रूप से एक खंड है


10

जावा वर्चुअल मशीन के अंदर से उद्धरण

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

मॉनिटर

एक मॉनिटर एक इमारत की तरह है जिसमें एक विशेष कमरा होता है जिसे एक समय में केवल एक थ्रेड द्वारा कब्जा किया जा सकता है। कमरे में आमतौर पर कुछ डेटा होते हैं। जिस समय से एक धागा इस कमरे में प्रवेश करता है उस समय तक यह निकल जाता है, कमरे में किसी भी डेटा तक इसकी विशेष पहुंच होती है। मॉनिटर बिल्डिंग में प्रवेश करने को "मॉनिटर में प्रवेश करना" कहा जाता है। इमारत के अंदर विशेष कमरे में प्रवेश करने को "मॉनिटर प्राप्त करना" कहा जाता है। कमरे पर कब्जा करने को "मॉनिटरिंग का मालिक" कहा जाता है, और कमरे को छोड़ने को "मॉनिटर जारी करना" कहा जाता है। पूरे भवन को छोड़ने को "मॉनिटर से बाहर निकलना" कहा जाता है।

बिट डेटा के साथ जुड़े होने के अलावा, एक मॉनिटर एक या अधिक बिट कोड से जुड़ा होता है, जिसे इस पुस्तक में मॉनिटर क्षेत्र कहा जाएगा।

जैसा कि पहले उल्लेख किया गया है, भाषा आपके कार्यक्रमों में मॉनिटर क्षेत्रों की पहचान करने के लिए दो अंतर्निहित तरीके प्रदान करती है: सिंक्रनाइज़ किए गए कथन और सिंक्रनाइज़ किए गए तरीके। ये दो तंत्र, जो सिंक्रनाइज़ेशन के पारस्परिक बहिष्करण पहलू को लागू करते हैं, जावा वर्चुअल मशीन के अनुदेश सेट द्वारा समर्थित हैं।

लॉक

मॉनिटर की पारस्परिक अपवर्जन क्षमता को लागू करने के लिए, जावा वर्चुअल मशीन प्रत्येक ऑब्जेक्ट और क्लास के साथ एक लॉक (कभी-कभी म्यूटेक्स कहा जाता है) को जोड़ती है। एक ताला विशेषाधिकार की तरह है कि किसी भी एक समय में केवल एक धागा "खुद" कर सकता है।

एक ही धागे को एक ही वस्तु को कई बार लॉक करने की अनुमति है। प्रत्येक ऑब्जेक्ट के लिए, जावा वर्चुअल मशीन उस वस्तु की संख्या को गिनाती है जिस पर ऑब्जेक्ट लॉक किया गया है। एक अनलॉक की गई वस्तु में शून्य की गिनती होती है। जब कोई धागा पहली बार लॉक का अधिग्रहण करता है, तो गिनती फिर से एक के लिए बढ़ जाती है। जब भी थ्रेड एक ही ऑब्जेक्ट पर लॉक प्राप्त करता है, तो गिनती फिर से बढ़ जाती है।


6

ए के synchronizedआसपास एक ब्लॉक objectइसकी मॉनिटर है, जो ऑब्जेक्ट पर एक लॉक को नियंत्रित करता है। यहाँ एक उदाहरण है

synchronized (object) {
   while (<condition does not hold>)
      object.wait(timeout);
   ... // Perform action appropriate to condition
}

4

भले ही इस प्रश्न का उत्तर देने में देर हो चुकी है, मैंने सोचा कि केवल इन-केस जोड़ना ही उपयोगी है।
यहाँ एक असंबद्ध जावा विधि के अंदर जावा कोड का एक सिंक्रनाइज़ेशन ब्लॉक है

public void add(int value){
synchronized(this){
      this.count += value;
   }
}

उदाहरण में "यह" का उपयोग किया जाता है, जो उदाहरण के लिए ऐड विधि को कहा जाता है। एक सिंक्रनाइज़ आवृत्ति विधि उस ऑब्जेक्ट का उपयोग करती है जो मॉनिटर ऑब्जेक्ट के रूप में होता है।
=> केवल एक धागा एक ही मॉनीटर ऑब्जेक्ट पर सिंक्रनाइज़ किए गए जावा कोड ब्लॉक के अंदर निष्पादित कर सकता है।


3

जावा वर्चुअल मशीन मल्टीथ्रेडिंग का समर्थन करने के लिए मॉनिटर का उपयोग करता है। मॉनिटर्स इसे दो अवधारणाओं के माध्यम से प्राप्त करते हैं - थ्रेड्स चलाते समय पारस्परिक बहिष्करण (यहां 'लॉकिंग' चित्र में आता है) और अंतर सूत्र संचार के साधन के रूप में समन्वय (यहां ऑब्जेक्ट का इंतजार और अधिसूचित तरीके चित्र में आते हैं)।

"इनसाइड जेवीएम" से निम्नलिखित भाग को पढ़ने से यह संदेह दूर हो जाएगा, क्या यह यहाँ पर बहुत अच्छी तरह से समझाया गया है (अध्याय 20, थ्रेडाइजेशन) -

https://www.artima.com/insidejvm/ed2/threadsynchP.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.