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