tunggu() dan notify() dalam Java: Senario Mudah dengan Queue
Di Java, tunggu() dan notify() kaedah menyediakan mekanisme untuk penyegerakan benang. Mari kita terokai senario mudah di mana kaedah ini boleh digunakan untuk melaksanakan baris gilir menyekat.
Pelaksanaan Gilir Menyekat
Baris gilir menyekat ialah struktur data baris gilir yang menyekat urutan apabila cuba melakukan operasi tertentu jika syarat tertentu tidak dipenuhi. Dalam pelaksanaan kami, kami akan melaksanakan kaedah put() dan take(), yang akan menyekat jika baris gilir penuh atau kosong, masing-masing.
public class BlockingQueue<T> { private Queue<T> queue = new LinkedList<>(); private int capacity; public BlockingQueue(int capacity) { this.capacity = capacity; } // Blocks if the queue is full (no space to insert) public synchronized void put(T element) throws InterruptedException { while (queue.size() == capacity) { wait(); } queue.add(element); notifyAll(); } // Blocks if the queue is empty (nothing to remove) public synchronized T take() throws InterruptedException { while (queue.isEmpty()) { wait(); } T item = queue.remove(); notifyAll(); return item; } }
Penggunaan
Sekarang, mari lihat cara menggunakan baris gilir menyekat ini.
BlockingQueue<Integer> queue = new BlockingQueue<>(10); // Producer thread: adds elements to the queue new Thread(() -> { for (int i = 0; i < 15; i++) { try { queue.put(i); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); // Consumer thread: retrieves elements from the queue new Thread(() -> { for (int i = 0; i < 15; i++) { try { System.out.println(queue.take()); } catch (InterruptedException e) { e.printStackTrace(); } } }).start();
Dalam contoh ini, urutan pengeluar akan menambah elemen ke baris gilir, menyekat apabila ia mencapai had kapasiti. Urutan pengguna akan mendapatkan semula elemen, menyekat apabila baris gilir kosong.
Pertimbangan Utama
Atas ialah kandungan terperinci Bagaimanakah Kaedah `wait()` dan `notify()` Java Melaksanakan Baris Menyekat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!