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

"এবং আরও কয়েকটি বিশদ বিবরণ। আসুন এটিকে ব্যবহারিক পরামর্শ বলি।"

"ধরুন আপনার কাছে এমন একটি পদ্ধতি আছে যা কিছুর জন্য অপেক্ষা করছে এবং একটি শর্ত সন্তুষ্ট না হওয়া পর্যন্ত ঘুমিয়ে পড়ে।"

যদি সংগ্রহ খালি হয়, তাহলে আমরা অপেক্ষা করি
public synchronized Runnable getJob()
{
 if (jobs.size() == 0)
  this.wait();

 return jobs.remove(0);
}

"জাভা ডকুমেন্টেশন খুব জোর দিয়ে একটি লুপে অপেক্ষা করার পদ্ধতিকে কল করার পরামর্শ দেয়:"

যদি সংগ্রহ খালি হয়, তাহলে আমরা অপেক্ষা করি
public synchronized Runnable getJob()
{
 while (jobs.size() == 0)
  this.wait();

 return jobs.remove(0);
}

"কেন? ব্যাপারটা হল যদি থ্রেড জেগে ওঠে, তার মানে এই নয় যে শর্তটি সন্তুষ্ট। হয়তো এরকম বিশটি ঘুমের সুতো ছিল। তাদের সবাই জেগেছে, কিন্তু শুধুমাত্র একজন কাজটি নিতে পারে।"

"মোটামুটিভাবে বলতে গেলে, 'মিথ্যা অ্যালার্ম' হতে পারে। একজন ভালো বিকাশকারীকে অবশ্যই এটি বিবেচনায় নিতে হবে।"

"আমি দেখছি। শুধু বিজ্ঞপ্তি ব্যবহার করা কি সহজ নয়?"

"আচ্ছা, তালিকায় একাধিক কাজ থাকলে কী হবে? সাধারণত অপ্টিমাইজেশনের জন্য Notify ব্যবহার করার পরামর্শ দেওয়া হয়। অন্য সব ক্ষেত্রে, notifyAll পদ্ধতি ব্যবহার করার পরামর্শ দেওয়া হয়।"

"ঠিক আছে."

"কিন্তু আরও অনেক কিছু আছে। প্রথমত, এমন একটি পরিস্থিতি হতে পারে যেখানে কেউ আপনার ক্লাসের উত্তরাধিকারী হয়, তাদের নিজস্ব পদ্ধতি যোগ করে এবং অপেক্ষা/notifyAll ব্যবহার করে। অন্য কথায়, এমন একটি পরিস্থিতি হতে পারে যেখানে স্বাধীন অপেক্ষা/notifyAll জোড়া একই বস্তুতে অপেক্ষা করে। এবং একে অপরের সম্পর্কে জানেন না। তাহলে আপনার কি করা উচিত?"

"সর্বদা একটি লুপে অপেক্ষা করুন এবং লুপের সমাপ্তির শর্তটি সত্য কিনা তা পরীক্ষা করুন!"

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

"ওহ। বুঝেছি। লুপ ছাড়া, অপেক্ষার পদ্ধতি ভালো নয়।"