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जब भी आप कर सकते हैं डेटा संरचनाओं का उपयोग करें ।