থ্রেডিংয়ের বিষয়ে উচ্চ স্তরের জাভা ক্লাসে আমার শিক্ষক এমন কিছু বলেছেন যা সম্পর্কে আমি নিশ্চিত নই।
তিনি বলেছিলেন যে নিম্নলিখিত কোডগুলি অগত্যা readyপরিবর্তনশীলটিকে আপডেট করবে না । তাঁর মতে, দুটি থ্রেড অগত্যা স্ট্যাটিক ভেরিয়েবল ভাগ করে না, বিশেষত যখন প্রতিটি থ্রেড (মূল থ্রেড বনাম ReaderThread) তার নিজস্ব প্রসেসরে চলছে এবং সুতরাং একই রেজিস্টার / ক্যাশে / ইত্যাদি ভাগ করে না এবং একটি সিপিইউ করে অন্য আপডেট করবেন না।
মূলত, তিনি বলেছিলেন যে readyমূল থ্রেডে এটি আপডেট করা সম্ভব , তবে এতে নেই ReaderThread, যাতে ReaderThreadঅসীম লুপ হয়ে যায়।
তিনি দাবি করেছিলেন যে প্রোগ্রামটি মুদ্রণ করা সম্ভব হয়েছিল 0বা 42। আমি বুঝতে পারি কীভাবে 42মুদ্রিত হতে পারে, তবে না 0। তিনি উল্লেখ করেছিলেন যে যখন numberভেরিয়েবলটি ডিফল্ট মানকে সেট করা হয় তখন এটি হবে ।
আমি ভেবেছিলাম সম্ভবত এটি গ্যারান্টিযুক্ত নয় যে থ্রেডগুলির মধ্যে স্ট্যাটিক ভেরিয়েবল আপডেট হয়েছে তবে জাভাটির জন্য এটি আমাকে খুব বিজোড় বলে মনে করে। readyঅস্থির করে তোলে কি এই সমস্যাটিকে সংশোধন করে?
তিনি এই কোডটি দেখিয়েছেন:
public class NoVisibility {
private static boolean ready;
private static int number;
private static class ReaderThread extends Thread {
public void run() {
while (!ready) Thread.yield();
System.out.println(number);
}
}
public static void main(String[] args) {
new ReaderThread().start();
number = 42;
ready = true;
}
}
