waitdidefinisikan dalam Object, dan bukan itu Thread. Monitor menyala Threadsedikit tidak terduga.
Meskipun semua objek Java memiliki monitor, umumnya lebih baik memiliki kunci khusus:
private final Object lock = new Object();
Anda dapat sedikit lebih mudah membaca diagnostik, dengan biaya memori yang kecil (sekitar 2K per proses) dengan menggunakan kelas bernama:
private static final class Lock { }
private final Object lock = new Lock();
Untuk waitatau notify/ notifyAllsuatu objek, Anda harus memegang kunci dengan synchronizedpernyataan. Selain itu, Anda akan memerlukan whileperulangan untuk memeriksa kondisi bangun (temukan teks yang bagus di threading untuk menjelaskan alasannya).
synchronized (lock) {
while (!isWakeupNeeded()) {
lock.wait();
}
}
Untuk memberi tahu:
synchronized (lock) {
makeWakeupNeeded();
lock.notifyAll();
}
Sebaiknya Anda memahami bahasa Jawa dan java.util.concurrent.lockskunci (dan java.util.concurrent.atomic) ketika masuk ke multithreading. Tetapi gunakan java.util.concurrentstruktur data kapan pun Anda bisa.