জাভাতে একটি মনিটর কী?


129

জাভাতে সমকালীন প্রোগ্রামিংয়ে কোন মনিটরের কথা বলা হয়?

যখন আমি পড়ি যে "প্রতিটি বস্তু একটি মনিটরের সাথে যুক্ত হয়েছে" এর অর্থ কী?

এটি একটি বিশেষ বিষয়?


11
+1 এটি আমাকে JVM স্তরে কীভাবে প্রয়োগ করা হয় তা পড়তে বাধ্য করে। নতুন কিছু শিখেছে
নাইকাস

@নায়েকাস আমি আপনাকে ভাগ করে নেওয়ার বিশদটি আশা করি :)
রুট ট্রাভেলার

উত্তর:


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
@ আন্দ্রেজেজ: সুতরাং, প্রতিটি বস্তুর সাথে এটির সাথে সম্পর্কিত একটি মনিটর রয়েছে। তারপরে আমার অনেকগুলি সিঙ্ক্রোনাইজড পদ্ধতি থাকতে পারে। যে কোনও পদ্ধতির পরে যখনই কোনও থ্রেড কল করে তখন সেই মনিটরটি সিঙ্ক স্টাফগুলি করে।
xdevel2000

1
কেবল এটি স্পষ্ট করে বলা দরকার ... থ্রেড 1-এ একটি সিঙ্ক্রোনাইজড ব্লক কল করতে ব্যবহৃত অবজেক্টটি একই সাথে সাধারণ পদ্ধতিতে (সিঙ্ক্রোনাইজ করা হয়নি) কল করতে অন্য থ্রেড (থ্রেড 2) এ আবার ব্যবহার করা যেতে পারে?

26

একটি মনিটর এমন একটি সত্তা যা লক এবং একটি ওয়েট সেট উভয়েরই অধিকারী । জাভাতে, যে কোনও Objectমনিটরের কাজ করতে পারে।

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


যেমন আপনি বলেছিলেন "একজন মনিটর একটি সত্তা ..", তার মানে কি মনিটরটি কোনও অভ্যন্তরীণ অবজেক্ট / রাষ্ট্র যা লক এবং ওয়েটসেটটির অধিকারী / ট্র্যাক করে? যদি না আপনি এখানে দয়া করে বিস্তারিত সত্তা বর্ণনা করতে পারেন? মূলত যখন আমরা জাভা ডকটি Wakes up all threads that are waiting on this object's monitor. নোটিফিয়াল () সম্পর্কে বলি, আমি যে জিনিসটি পাই তা রক্ষা করা হয় (অভ্যন্তরীণ সত্তা / বস্তুর সহায়তায়) সমস্ত থ্রেড লকের জন্য অপেক্ষা করছে, সেই অভ্যন্তরীণ সত্তা / বস্তুকে মনিটর বলা হয়?
ব্যবহারকারী3198603

সবচেয়ে দরকারী উত্তর। ধন্যবাদ @ জেআরএল।
গ্র্যাটিটি

আমার জন্য এটি বলে: "এই পৃষ্ঠার জন্য কোনও পূর্বরূপ উপলব্ধ নেই।"
16

9
  1. একটি মনিটর এমন একটি ধারণা / প্রক্রিয়া যা জাভা ভাষার মধ্যে সীমাবদ্ধ নয়;
  2. "একযোগে প্রোগ্রামিংয়ে, একটি মনিটর এমন একটি বস্তু বা মডিউল যা একাধিক থ্রেড দ্বারা নিরাপদে ব্যবহার করা যায়";
  3. যেমনটি প্রতিটি পাঠক জানেন, জাভাতে প্রতিটি বস্তু জাভা.লং.অবজেক্টের একটি উপ-শ্রেণি। জাভা লোকেরা জাভা.লং.অবজেক্টটি এমনভাবে তৈরি করেছিল যাতে এর বৈশিষ্ট্য এবং বৈশিষ্ট্য রয়েছে যা জাভা প্রোগ্রামারদের কোনও মনিটর হিসাবে কোনও বস্তু ব্যবহার করতে সক্ষম করে। উদাহরণস্বরূপ, প্রতিটি বস্তুর একটি অপেক্ষার সারি, পুনরায় প্রবেশের সারি রয়েছে এবং এটি একটি মনিটর তৈরির পদ্ধতিগুলি অপেক্ষা করুন এবং অবহিত করুন;
  4. এখানে মনিটর সম্পর্কে পড়ুন ।

4

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



2

মনিটর একটি সিঙ্ক্রোনাইজেশন কনস্ট্রাক্ট যা থ্রেডগুলিকে পারস্পরিক বর্জন এবং একটি নির্দিষ্ট শর্তটি সত্য হওয়ার জন্য অপেক্ষা (ব্লক) করার ক্ষমতা উভয়কেই করতে দেয়।

মনিটরের কাছে অন্যান্য থ্রেডের সংকেত দেওয়ার জন্যও একটি প্রক্রিয়া রয়েছে যা তাদের শর্তটি মেটেছে। এটি এমন একটি সত্তা যা লক এবং একটি ওয়েট সেট উভয়েরই অধিকারী। জাভাতে, যে কোনও অবজেক্ট মনিটরের কাজ করতে পারে।

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

আরও তথ্যের জন্য লিঙ্কটি চেক করুন


1

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

মনিটর অবজেক্ট বা ডেটা মেম্বারের সাথে সহযোগী, যা যখন কোনও ডেটা সদস্য বা অবজেক্ট প্রবেশ করানো হয় তখন সিঙ্ক্রোনাইজেশন ব্লক (সমালোচনামূলক বিভাগ) হয় এবং প্রস্থান হওয়ার পরে ছেড়ে যায়।

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