wait
didefinisikan dalam Object
, dan bukan itu Thread
. Monitor menyala Thread
sedikit 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 wait
atau notify
/ notifyAll
suatu objek, Anda harus memegang kunci dengan synchronized
pernyataan. Selain itu, Anda akan memerlukan while
perulangan 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.locks
kunci (dan java.util.concurrent.atomic
) ketika masuk ke multithreading. Tetapi gunakan java.util.concurrent
struktur data kapan pun Anda bisa.