waitসংজ্ঞায়িত করা হয় Object, এবং না Thread। মনিটরটি Threadকিছুটা অনাকাঙ্ক্ষিত।
যদিও সমস্ত জাভা অবজেক্টের মনিটর রয়েছে, সাধারণত একটি ডেডিকেটেড লক রাখা ভাল:
private final Object lock = new Object();
নামযুক্ত ক্লাসটি ব্যবহার করে আপনি একটি স্বল্প মেমোরি ব্যয়ে (প্রায় 2K প্রক্রিয়ায়) ডায়াগনস্টিকগুলি পড়তে কিছুটা সহজ পেতে পারেন:
private static final class Lock { }
private final Object lock = new Lock();
জন্য waitবা notify/ notifyAllএকটি বস্তু তোমাদের সঙ্গে লক অধিষ্ঠিত করা প্রয়োজন synchronizedবিবৃতি। এছাড়াও, whileজাগ্রত শর্তটি পরীক্ষা করার জন্য আপনার একটি লুপের প্রয়োজন হবে (কেন তা বোঝানোর জন্য থ্রেডিংয়ে একটি ভাল পাঠ্য সন্ধান করুন)।
synchronized (lock) {
while (!isWakeupNeeded()) {
lock.wait();
}
}
অবহিত করতে:
synchronized (lock) {
makeWakeupNeeded();
lock.notifyAll();
}
মাল্টিথ্রেডিংয়ের সময় জাভা ভাষা এবং java.util.concurrent.locksলকগুলি (এবং java.util.concurrent.atomic) উভয়ই বোঝা ভাল । java.util.concurrentআপনি যখনই পারেন তথ্যের স্ট্রাকচার ব্যবহার করুন।