Rumah > Java > javaTutorial > Mengapa notifyAll() Umumnya Diutamakan Daripada notify() dalam Java?

Mengapa notifyAll() Umumnya Diutamakan Daripada notify() dalam Java?

Patricia Arquette
Lepaskan: 2024-11-13 11:04:02
asal
683 orang telah melayarinya

Why is notifyAll() Generally Preferred Over notify() in 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;
}
Salin selepas log masuk

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:

  • The while loop around wait() adalah perlu untuk melindungi daripada wakeup palsu.
  • notifyAll() ialah pilihan yang lebih selamat secara umum, terutamanya dalam situasi yang tidak jelas benang menunggu yang harus dibangkitkan.
  • Menggantikan notify() dengan notifyAll() dalam kaedah yang disegerakkan boleh mengelakkan kemungkinan kebuntuan dan memastikan komunikasi benang yang betul.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan