जावा में मॉनिटर क्या है?


129

जावा में समवर्ती प्रोग्रामिंग में संदर्भित एक मॉनिटर क्या है?

जब मैंने पढ़ा कि "प्रत्येक वस्तु ने एक मॉनिटर को संबद्ध किया है" तो इसका क्या अर्थ है?

क्या यह एक विशेष वस्तु है?


11
+1 यह मुझे पढ़ता है कि जेवीएम स्तर पर मॉनिटर कैसे लागू होते हैं कुछ नया सीखा
naikus

@naikus मुझे उम्मीद है कि आप विवरणों को साझा करेंगे :)
रोटरवेलर

जवाबों:


89

किसी वस्तु पर समवर्ती पहुंच को नियंत्रित करने के लिए एक मॉनिटर तंत्र है।

यह आपको करने की अनुमति देता है:

धागा 1:

public void a()
{
    synchronized(someObject) {
        // do something (1)
    }
}

धागा 2:

public void b()
{
    synchronized(someObject) {
        // do something else (2)
    }
}

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

यह कोई विशेष वस्तु नहीं है। यह श्रेणीबद्ध पदानुक्रम रूट पर रखा गया सिंक्रनाइज़ेशन तंत्र है java.lang.Object:।

ऐसे भी तरीके waitऔर notifyतरीके हैं जो विभिन्न थ्रेड्स के बीच संचार के लिए ऑब्जेक्ट के मॉनिटर का भी उपयोग करेंगे।


1
तो क्या हम कह सकते हैं कि जब हम एक सिंक्रनाइज़ विधि बनाते हैं तो हम उस ऑब्जेक्ट की विधि पर एक लॉक (मॉनिटर) को परिभाषित कर रहे हैं?
xdevel2000

28
एर्म, बिल्कुल नहीं। प्रत्येक वस्तु में स्वचालित रूप से एक मॉनिटर (म्यूटेक्स) होता है, चाहे वह किसी भी चीज से जुड़ा हो। जब आप किसी विधि को सिंक्रनाइज़ करने की घोषणा करते हैं, तो आप घोषणा कर रहे हैं कि रनटाइम को उस विधि के निष्पादन से पहले ऑब्जेक्ट के मॉनिटर पर लॉक प्राप्त करना होगा (और कॉलिंग कोड को नियंत्रण रिटर्न से पहले लॉक को रिलीज़ करना होगा)।
आंद्रेज डोयले

31
और @ पाब्लो - एक विधि के लिए मॉनिटर जैसी कोई चीज नहीं है; मॉनिटर केवल वस्तुओं के लिए मौजूद हैं, जो कि अधिकांश तरीकों के लिए संलग्नक उदाहरण होगा, या Classस्थिर तरीकों के लिए संबंधित वस्तु। यदि आपके पास पहले से ही एक सिंक्रोनाइज़्ड मेथड 1 () है और आप मेथड 2 घोषित करते हैं, तो कोई भी नया मॉनीटर नहीं बनाया जाता है और वास्तव में या तो मेथड (उसी ऑब्जेक्ट पर) इन्क मॉनिटर को लॉक करने का प्रयास करेगा। यह अक्सर नए लोगों को पकड़ता है।
आंद्रेज डोयले

1
@Andrzej: तो, हर वस्तु के साथ एक मॉनिटर जुड़ा होता है। फिर मेरे पास कई सिंक्रनाइज़ तरीके हो सकते हैं। जब भी उस तरीके के थ्रेड कॉल के बाद यह उस मॉनिटर को प्राप्त करता है जो सिंक सामान करता है।
xdevel2000

1
बस इसे स्पष्ट करने की आवश्यकता है ... जिस वस्तु को थ्रेड 1 में एक सिंक्रनाइज़ ब्लॉक को कॉल करने के लिए उपयोग किया जाता है, उसी समय फिर से एक अन्य थ्रेड (थ्रेड 2) में सामान्य विधि (सिंक्रनाइज़ नहीं) को कॉल करने के लिए उपयोग किया जा सकता है?

26

एक मॉनिटर एक इकाई है जिसमें एक लॉक और एक प्रतीक्षा सेट दोनों होते हैं । जावा में, कोई भी Objectएक मॉनिटर के रूप में काम कर सकता है।

जावा में मॉनिटर कैसे काम करता है, इसकी विस्तृत व्याख्या के लिए, मैं जावा में समवर्ती प्रोग्रामिंग के मॉनिटर मैकेनिक्स अनुभाग को पढ़ने की सलाह देता हूं (पूर्ववर्ती लिंक Google पुस्तकों में पूर्वावलोकन प्रदर्शित करता है, और यह अनुभाग पढ़ने के लिए उपलब्ध है)।


जैसा कि आपने कहा "एक मॉनिटर एक इकाई है ..", क्या इसका मतलब यह है कि मॉनिटर एक आंतरिक वस्तु / स्थिति है जो लॉक और वाकेट को ट्रैक / ट्रैक करता है? यदि नहीं, तो क्या आप यहाँ पर विस्तृत जानकारी दे सकते हैं? मूल रूप से जब हम जावा डॉक्टर से Wakes up all threads that are waiting on this object's monitor. अनौपचारिक () के बारे में कहते हैं , तो मुझे जो वस्तु मिलती है, वह अनुरक्षण है (आंतरिक इकाई / वस्तु की मदद से) जो सभी सूत्र लॉक का इंतजार कर रहे हैं, उस आंतरिक इकाई / वस्तु को मॉनिटर कहा जाता है?
user3198603

सबसे उपयोगी जवाब। धन्यवाद @JRL
ग्रेविटी

मेरे लिए यह कहता है: "इस पृष्ठ के लिए कोई पूर्वावलोकन उपलब्ध नहीं है।"
opncow

9
  1. एक मॉनिटर एक अवधारणा / तंत्र है जो जावा भाषा तक सीमित नहीं है;
  2. "समवर्ती प्रोग्रामिंग में, एक मॉनिटर एक ऑब्जेक्ट या मॉड्यूल है जिसे एक से अधिक थ्रेड द्वारा सुरक्षित रूप से उपयोग करने का इरादा है";
  3. जैसा कि हर पाठक जानता है, जावा में हर वस्तु java.lang.Object की एक उप-श्रेणी है। जावा लोगों ने java.lang.Object को इस तरह से बनाया है कि इसमें ऐसी विशेषताएं और विशेषताएं हैं जो जावा प्रोग्रामर को किसी भी वस्तु को मॉनिटर के रूप में उपयोग करने में सक्षम बनाती हैं। उदाहरण के लिए, प्रत्येक ऑब्जेक्ट में एक प्रतीक्षा कतार, एक पुन: प्रवेश कतार और प्रतीक्षा करें और इसे मॉनिटर बनाने के तरीकों को सूचित करें;
  4. मॉनिटर के बारे में यहाँ पढ़ें ।

4

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



2

मॉनिटर एक सिंक्रनाइज़ेशन निर्माण है जो थ्रेड्स को पारस्परिक बहिष्करण और प्रतीक्षा करने की क्षमता (ब्लॉक) दोनों को एक निश्चित स्थिति के लिए सच होने की अनुमति देता है।

मॉनिटर के पास अन्य थ्रेड्स को संकेत देने के लिए एक तंत्र भी है जो उनकी स्थिति से मिले हैं। यह एक इकाई है जिसमें एक ताला और एक प्रतीक्षा सेट दोनों होते हैं। जावा में, कोई भी वस्तु मॉनिटर के रूप में काम कर सकती है।

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

अधिक जानकारी के लिए लिंक को देखें


1

http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/monitors.html

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

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