"হাই, অ্যামিগো!"

"এখানে এই বিশাল বিষয় আছে- জাভা মেমোরি মডেল। মূলত, আপনাকে এখনও এটি সম্পর্কে জানতে হবে না, তবে এটি সম্পর্কে শুনতে সহায়ক হবে।"

"সমস্ত সম্ভাব্য সমস্যা দূর করার জন্য, জাভা তার মেমরি ম্যানেজমেন্ট মেকানিজম পরিবর্তন করেছে। এখন মেমরিকে শুধু একটি থ্রেডের স্থানীয় ক্যাশে এবং গ্লোবাল মেমরিতে ভাগ করা হয় না - প্রক্রিয়াটি আরও ভাল।"

"এবং আরো জটিল!"

"হ্যাঁ, আরও ভাল এবং আরও জটিল। এটি একটি বিমানের মতো। বিমানে উড়ে যাওয়া হাঁটার চেয়ে ভাল, তবে আরও জটিল। আমি খুব সহজভাবে নতুন পরিস্থিতি ব্যাখ্যা করার চেষ্টা করব।"

"তারা যা নিয়ে এসেছিল তা এখানে। স্থানীয় থ্রেড মেমরি সিঙ্ক্রোনাইজ করার জন্য একটি পদ্ধতি, যাকে 'হ্যাপেনস-আগে' বলা হয়, কোডে যোগ করা হয়েছিল। বেশ কয়েকটি নিয়ম/শর্ত উদ্ভাবন করা হয়েছিল। যখন এই শর্তগুলি সন্তুষ্ট হয়, তখন মেমরি বর্তমানের সাথে সিঙ্ক্রোনাইজ বা আপডেট করা হয়। অবস্থা.

"এখানে একটি উদাহরণ:"

অর্ডার থ্রেড 1 থ্রেড 2
1
2

101
102
103
104
105

201
202
203
204
205
public int y = 1;
public int x = 1;

x = 2;
synchronized(mutex)
{
 y = 2;
}
থ্রেড mutex মুক্তির জন্য অপেক্ষা করছে

synchronized(mutex)
{
 if (y == x)
 System.out.println("YES");
}

"এই শর্তগুলির মধ্যে একটি হল মুক্তিপ্রাপ্ত মিউটেক্সের অধিগ্রহণ। যদি একটি মিউটেক্স প্রকাশ করা হয় এবং পুনরায় অধিগ্রহণ করা হয়, তাহলে অধিগ্রহণের আগে মেমরিটি সিঙ্ক্রোনাইজ হবে। থ্রেড 2 x এবং y ভেরিয়েবলের 'সর্বশেষ' মান দেখতে পাবে, এমনকি যদি আপনি তাদের উদ্বায়ী ঘোষণা করবেন না।"

"কত আকর্ষণীয়! এবং এই শর্ত অনেক আছে?"

"যথেষ্ট - মেমরি সিঙ্ক্রোনাইজ করার জন্য এখানে কিছু শর্ত রয়েছে:"

  • "একটি একক থ্রেডের মধ্যে, যেকোন কমান্ড ঘটবে- কোন অপারেশনের আগে যা এটি সোর্স কোডে অনুসরণ করে।"
  • "একটি লকের মুক্তি ঘটে - একই তালা অর্জিত হওয়ার আগে।"
  • "একটি সিঙ্ক্রোনাইজড ব্লক/পদ্ধতি  থেকে প্রস্থান ঘটবে- একই মনিটরে সিঙ্ক্রোনাইজড ব্লক/পদ্ধতি প্রবেশ করার আগে।"
  • "মেমরিতে একটি উদ্বায়ী ক্ষেত্রের লেখা ঘটে - মেমরি থেকে একই উদ্বায়ী ক্ষেত্র পড়ার আগে।"
  • "একটি থ্রেড অবজেক্টের রান পদ্ধতির সমাপ্তি ঘটবে- join() মেথড শেষ হওয়ার আগে অথবা একই থ্রেডের অবজেক্টে isAlive() মেথড মিথ্যা রিটার্ন করে।"
  • "একটি থ্রেড অবজেক্টের স্টার্ট() পদ্ধতিতে একটি কল ঘটে - একই থ্রেডে অবজেক্টে রান() পদ্ধতি শুরু হওয়ার আগে।"
  • "কন্সট্রাক্টরের সমাপ্তি ঘটে - এই ক্লাসের চূড়ান্ত() পদ্ধতি শুরু হওয়ার আগে।"
  • "ইন্টারপ্টেড() পদ্ধতিতে একটি কল আসে- থ্রেড নির্ধারণ করার আগে যে এই পদ্ধতিটি কল করা হয়েছে, হয় একটি InterruptedException নিক্ষেপ করা হয়েছে বা isInterrupted() বা interrupted() পদ্ধতি ব্যবহার করে।"

"তাহলে, আমি যা ভেবেছিলাম তার চেয়ে এটি একটু বেশি জটিল?"

"হ্যাঁ, একটু বেশি জটিল..."

"ধন্যবাদ, ঋষি। আমি এটা নিয়ে ভাবব।"

"এই বিষয়টি নিয়ে খুব বেশি চিন্তা করবেন না। এমন সময় আসবে যখন আপনি নিজেই সবকিছু বুঝতে পারবেন। আপাতত, আপনার জন্য ঘন জঙ্গলে না গিয়ে মূল বিষয়গুলো বোঝা ভালো হবে। জাভা মেশিনের অভ্যন্তরীণ কাজ। Java 9 প্রকাশিত হবে এবং তারপরে সবকিছু আবার বদলে যাবে।"

"ওও। হ্যাঁ... কিছু জিনিস না জানাই ভালো।"