জাভাতে কোনও বস্তুর মনিটরের অর্থ কী? এই শব্দটি ব্যবহার করবেন কেন?


87

জাভা থ্রেড সম্পর্কে নিবন্ধগুলি পড়ার সময়, আমি প্রায়শই এই অভিব্যক্তিটি লক্ষ্য করি: "বর্তমান থ্রেডটি এই বস্তুর মনিটরের মালিক"। আমি অর্থটি পেয়েছি: থ্রেডটি বস্তুটিতে কাজ করার অধিকার পায়। তবে আমি আশ্চর্য হই যে আমরা কেন "বস্তুর লক" এর পরিবর্তে "অবজেক্টের মনিটর" শব্দটি ব্যবহার করি?

সংক্ষেপে, আমি 'মনিটর' শব্দের অর্থ জানি না প্রশ্নটি অদ্ভুত এবং সহজ হতে পারে। তবে আমি আশা করি যে কেউ এটি সমাধানে সহায়তা করতে পারে। 3ks


4
আপনার প্রশ্নের উত্তর দেওয়ার একমাত্র ব্যক্তি হিসাবে +1 @ মলমাংট: আমরা তাদেরকে "মনিটর" বলি কারণ এটাই যে হোরে 1976 সালে তাদের ফিরিয়ে দিয়েছিল।
সলোমন স্লো

উত্তর:


52

তবে আমি আশ্চর্য হয়েছি কেন "অবজেক্টের মনিটর" শব্দটি "অবজেক্টের লক" দেওয়ার জন্য ব্যবহার করে?

এই প্রসঙ্গে ব্যবহৃত হিসাবে "মনিটর" শব্দটি ব্যাখ্যা করে এমন লিঙ্কগুলির জন্য উলমাংটের উত্তর দেখুন। মনে রাখবেন যে:

"মনিটরগুলি পের ব্রিঞ্চ হ্যানসেন এবং সিএআর হোয়ার আবিষ্কার করেছিলেন এবং প্রথমে ব্রিঞ্চ হ্যানসেনের সমকালীন পাস্কাল ভাষায় প্রয়োগ করা হয়েছিল।"

(সূত্র: উইকিপিডিয়া )

"লক" না করে "মনিটর" শব্দটি কেন ব্যবহার করবেন? কড়া কথায় কথায় বলতে গেলে, শর্তাদির অর্থ বিভিন্ন জিনিস ... বিশেষত যদি আপনি সেগুলি সেভাবে ব্যবহার করেন যা সেগুলি মূলত ব্যবহার করার ইচ্ছা ছিল।

  • একটি "লক" হ'ল এমন কিছু যা আদায় এবং প্রকাশের সাথে কিছু নির্দিষ্ট লক বৈশিষ্ট্য বজায় রাখে; যেমন একচেটিয়া ব্যবহার বা একক লেখক / একাধিক পাঠক।

  • একটি "মনিটর" এমন একটি প্রক্রিয়া যা নিশ্চিত করে যে কেবলমাত্র একটি থ্রেড কোনও নির্দিষ্ট সময়ে কোডের একটি প্রদত্ত বিভাগ (বা বিভাগ) সম্পাদন করতে পারে। এটি একটি লক (এবং "শর্ত ভেরিয়েবল" ব্যবহার করে প্রয়োগ করা যেতে পারে যা থ্রেডগুলি অপেক্ষা করতে বা শর্তটি পূরণের জন্য অন্যান্য থ্রেডগুলিতে বিজ্ঞপ্তি প্রেরণের মঞ্জুরি দেয়), তবে এটি কেবল একটি লক ছাড়াও বেশি। প্রকৃতপক্ষে, জাভা ক্ষেত্রে, একটি মনিটরের দ্বারা ব্যবহৃত প্রকৃত লকটি সরাসরি অ্যাক্সেসযোগ্য নয়। (অন্যান্য থ্রেডগুলি এটি অর্জন থেকে রোধ করতে আপনি কেবল "অবজেক্ট.লক ()" বলতে পারবেন না ... যেমন আপনি জাভা Lockউদাহরণ দিয়ে করতে পারেন ))

সংক্ষেপে, যদি কেউ পেডেন্টিক হতে হয় তবে "জাবি" কী জাভা সরবরাহ করছে তা চিহ্নিতকরণের জন্য "লক" এর চেয়ে ভাল শব্দ term তবে অনুশীলনে, উভয় পদই প্রায় বিনিময়যোগ্য হিসাবে ব্যবহৃত হয়।


22

মনিটর হ'ল একটি অবজেক্টের জন্য এমন একটি শব্দ, যার পদ্ধতিগুলি বহুবিধ পরিবেশে নিরাপদে ব্যবহার করা যেতে পারে।

মনিটরের উপর একটি দুর্দান্ত উইকিপিডিয়া নিবন্ধ রয়েছে:

http://en.wikedia.org/wiki/Monitor_( সিনক্রোনাইজেশন)

আপনি যদি নীচে স্ক্রোল করেন তবে এটি জাভা সম্পর্কে স্পষ্টভাবে একটি বিভাগ পেয়েছে ।


10

জাভা ভার্চুয়াল মেশিনের ভিতরে থেকে উদ্ধৃতি

জাভা ভার্চুয়াল মেশিনের একটি থ্রেড কোনও মনিটর অঞ্চলের শুরুতে এসে পৌঁছানোর সময় লকটির অনুরোধ করে। জাভাতে, দুই ধরণের মনিটরের অঞ্চল রয়েছে: সিঙ্ক্রোনাইজড স্টেটমেন্ট এবং সিঙ্ক্রোনাইজড পদ্ধতি।

নিরীক্ষণ

একটি মনিটর এমন বিল্ডিংয়ের মতো যাতে একটি বিশেষ কক্ষ থাকে যা একবারে কেবল একটি থ্রেড দ্বারা দখল করা যায়। ঘরে সাধারণত কিছু তথ্য থাকে। কোনও থ্রেড এই ঘরে thisোকার সময় পর্যন্ত এটির ঘরে কোনও ডেটাতে একচেটিয়া অ্যাক্সেস রয়েছে। মনিটরের বিল্ডিংয়ে ুকতে "মনিটরে প্রবেশ করা" বলা হয়। ভবনের অভ্যন্তরে বিশেষ কক্ষে প্রবেশ করাতে "মনিটর অর্জন করা" বলা হয়। ঘর দখলকে বলা হয় "মনিটরের মালিক," এবং ঘরটি ছেড়ে "মনিটর ছেড়ে দেওয়া" বলা হয়। পুরো বিল্ডিং ছেড়ে যাওয়ার জন্য "মনিটর থেকে বেরিয়ে আসা" বলা হয়।

কিছুটা ডেটা যুক্ত হওয়ার সাথে সাথে, একটি মনিটর কোডের এক বা একাধিক বিটের সাথে যুক্ত, যা এই বইয়ে মনিটর অঞ্চল হিসাবে পরিচিত হবে।

পূর্বে উল্লিখিত হিসাবে, ভাষাটি আপনার প্রোগ্রামগুলিতে মনিটরের অঞ্চলগুলি সনাক্ত করতে দুটি অন্তর্নির্মিত উপায় সরবরাহ করে: সিঙ্ক্রোনাইজড স্টেটমেন্ট এবং সিঙ্ক্রোনাইজড পদ্ধতিগুলি। এই দুটি প্রক্রিয়া, যা সিঙ্ক্রোনাইজেশনের পারস্পরিক বর্জনীয় দিকটি বাস্তবায়িত করে, জাভা ভার্চুয়াল মেশিনের নির্দেশনা সেট দ্বারা সমর্থিত।

লক

মনিটরের পারস্পরিক বর্ধন ক্ষমতা বাস্তবায়নের জন্য, জাভা ভার্চুয়াল মেশিন প্রতিটি বস্তু এবং শ্রেণীর সাথে একটি লক (কখনও কখনও মিউটেক্স নামে পরিচিত) সংযুক্ত করে। একটি লক একটি বিশেষাধিকারের মতো যা কেবল একবারে একটি থ্রেড যে কোনও সময়ে "নিজের" করতে পারে।

একক থ্রেডকে একই বস্তুকে একাধিকবার লক করার অনুমতি দেওয়া হয়েছে। প্রতিটি বস্তুর জন্য, জাভা ভার্চুয়াল মেশিনটি কতবার লক হয়ে গেছে তার একটি গণনা বজায় রাখে। একটি আনলক করা অবজেক্টের শূন্যের গণনা রয়েছে। যখন কোনও থ্রেড প্রথমবারের জন্য লকটি অর্জন করে, তখন গণনাটি আবার একটিতে বাড়ানো হয়। প্রতিবার থ্রেড একই বস্তুর উপর একটি লক অর্জন করলে, গণনা আবার বাড়ানো হয়।


6

এর synchronizedচারপাশের একটি ব্লক objectহ'ল তার মনিটর, যা বস্তুর একটি লক নিয়ন্ত্রণ করে। এখানে একটি উদাহরণ

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

4

যদিও এই প্রশ্নের উত্তর দিতে দেরি হয়ে গেছে, আমি ভেবেছিলাম কেবল এটি যুক্ত হলে এটি দরকারী।
একটি আনসাইক্রোনাইজড জাভা পদ্ধতির ভিতরে জাভা কোডের একটি সিঙ্ক্রোনাইজড ব্লক এটি is

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

উদাহরণে "এটি" ব্যবহৃত হয়, উদাহরণস্বরূপ অ্যাড পদ্ধতিটি ডাকা হয়। একটি সিঙ্ক্রোনাইজড ইনস্ট্যান্স পদ্ধতিটি মনিটরের অবজেক্ট হিসাবে সম্পর্কিত অবজেক্টটি ব্যবহার করে।
=> একই মনিটর অবজেক্টে সিঙ্ক্রোনাইজ করা জাভা কোড ব্লকের ভিতরে কেবল একটি থ্রেড কার্যকর করতে পারে।


3

জাভা ভার্চুয়াল মেশিন মাল্টিথ্রেডিং সমর্থন করার জন্য মনিটর ব্যবহার করে। পর্যবেক্ষকরা দুটি ধারণার মাধ্যমে এটি অর্জন করেন - থ্রেডগুলি চালনার সময় পারস্পরিক ব্যতিক্রম (এখানেই 'লকিং' ছবিতে আসে) এবং আন্তঃ থ্রেড যোগাযোগের মাধ্যম হিসাবে সমন্বয় (এখানে অবজেক্টের অপেক্ষা এবং বিজ্ঞাপিত পদ্ধতিগুলি ছবিতে আসে)।

"ইনভাইড জেভিএম" থেকে নিম্নলিখিত অংশটি পড়লে এই সন্দেহ দূর হবে, এখানে কি খুব সুন্দরভাবে ব্যাখ্যা করা হয়েছে (অধ্যায় 20, থ্রেড সিঙ্ক্রোনাইজেশন) -

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.