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
আপনি যখনই পারেন তথ্যের স্ট্রাকচার ব্যবহার করুন।