Kaedah objek dalam Java: penjelasan terperinci tentang tunggu dan maklumkan
Di Jawa, kaedah objek tunggu dan beritahu ialah alat penting untuk kerjasama dan komunikasi antara rangkaian. Mereka membantu utas menunggu atau membangunkan pelaksanaan utas lain pada masa yang sesuai. Artikel ini akan memperkenalkan penggunaan kaedah tunggu dan pemberitahuan secara terperinci dan memberikan contoh kod khusus.
1. Penggunaan kaedah tunggu
Kaedah tunggu digunakan untuk meletakkan utas semasa ke dalam keadaan menunggu sehingga utas lain memanggil kaedah pemberitahuan pada objek yang sama, atau kaedah notifyAll membangunkannya. Kaedah tunggu mempunyai bentuk berikut:
Apabila menggunakan kaedah tunggu, ia mesti dimasukkan ke dalam blok kod yang disegerakkan untuk memastikan penguncian objek. Berikut ialah contoh klasik:
public class WaitNotifyExample { private boolean flag = false; public synchronized void waitForFlag() { try { while (!flag) { wait(); // 当前线程等待 } } catch (InterruptedException e) { e.printStackTrace(); } // 执行其他操作 } public synchronized void setFlag() { flag = true; notify(); // 唤醒正在等待的线程 } }
Dalam contoh di atas, selepas memanggil kaedah waitForFlag, utas akan memasuki keadaan menunggu sehingga utas lain memanggil kaedah setFlag untuk membangunkannya.
2. Penggunaan kaedah notify
Kaedah notify digunakan untuk membangunkan benang yang menunggu. Ia akan memilih utas secara rawak untuk bangun Jika terdapat berbilang utas menunggu, hanya satu daripadanya boleh dibangunkan. Kaedah pemberitahuan digunakan dalam bentuk berikut:
public class NotifyExample { public synchronized void waitForNotify() { try { wait(); // 当前线程等待 } catch (InterruptedException e) { e.printStackTrace(); } // 执行其他操作 } public synchronized void notifyThread() { notify(); // 唤醒一个等待的线程 } }
Dalam contoh di atas, utas yang memanggil kaedah waitForNotify akan memasuki keadaan menunggu sehingga utas lain memanggil kaedah notifyThread untuk membangunkannya.
3. Gunakan tunggu dan maklumkan untuk mencapai kerjasama antara benang
Kaedah tunggu dan maklumkan sering digunakan dalam senario kerjasama berbilang benang seperti model pengeluar-pengguna. Berikut ialah contoh pengeluar-pengguna yang mudah:
public class ProducerConsumerExample { private LinkedList<Integer> buffer = new LinkedList<>(); private final int MAX_SIZE = 10; public synchronized void produce() { while (buffer.size() == MAX_SIZE) { try { wait(); // 缓冲区已满,生产者线程等待 } catch (InterruptedException e) { e.printStackTrace(); } } buffer.add(1); notifyAll(); // 唤醒等待的消费者线程 } public synchronized void consume() { while (buffer.size() == 0) { try { wait(); // 缓冲区为空,消费者线程等待 } catch (InterruptedException e) { e.printStackTrace(); } } buffer.removeFirst(); notifyAll(); // 唤醒等待的生产者线程 } }
Dalam contoh di atas, apabila penimbal penuh, utas pengeluar memasuki keadaan menunggu sehingga utas pengguna menggunakan elemen dalam penimbal dan membangunkan pengeluaran atau utas. Apabila penimbal kosong, utas pengguna akan memasuki keadaan menunggu sehingga utas pengeluar menghasilkan elemen baharu dan membangkitkan utas pengguna.
Ringkasan: Kaedah tunggu dan maklumkan ialah alat penting untuk kerjasama dan komunikasi rangkaian di Jawa. Mereka memainkan peranan penting dalam pengaturcaraan berbilang benang. Melalui penggunaan kaedah tunggu dan pemberitahuan yang munasabah, kerjasama dan komunikasi yang elegan antara rangkaian boleh dicapai.
Atas ialah kandungan terperinci Analisis mendalam kaedah objek dalam Java: tunggu dan maklumkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!