Rumah >Java >javaTutorial >Mengapa notifyAll() Umumnya Diutamakan Daripada notify() dalam Java?
Memahami Nuansa Java's notify() vs. notifyAll() Methods
Walaupun banyak penjelasan tersedia dalam talian, perbezaan antara Java's notify( ) dan kaedah notifyAll() sering dipermudahkan kepada bilangan benang yang dibangkitkan. Walau bagaimanapun, pemahaman yang lebih mendalam mendedahkan konsep yang lebih bernuansa.
Sementara kedua-dua kaedah membangunkan utas menunggu pada monitor objek, hanya satu utas dipilih untuk memperoleh kunci dan meneruskan. Dalam kes notify(), VM membuat pilihan sewenang-wenangnya, manakala notifyAll() bergantung pada penjadual urutan sistem untuk pilihan itu.
Persoalan utama timbul: apakah perbezaan praktikal antara kedua-dua kaedah?
Kepentingan notifyAll() Over notify()
The contoh pengeluar/pengguna menggambarkan sebab notifyAll() secara amnya adalah pilihan yang diutamakan:
public synchronized void put(Object o) { while (buf.size() == MAX_SIZE) { wait(); } buf.add(o); notifyAll(); } public synchronized Object get() { while (buf.size() == 0) { wait(); } Object o = buf.remove(0); notifyAll(); return o; }
Dalam contoh ini, notify() boleh membawa kepada situasi kebuntuan apabila urutan peristiwa yang diterangkan dalam bahan rujukan berlaku. Walau bagaimanapun, dengan notifyAll() disediakan, kebuntuan ini dapat dielakkan kerana semua urutan menunggu dibangkitkan, membenarkan penyegerakan yang betul.
Cerapan Tambahan:
Atas ialah kandungan terperinci Mengapa notifyAll() Umumnya Diutamakan Daripada notify() dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!