멀티 스레드 프로그래밍에서 wait() 및 inform()은 스레드 동기화에 사용됩니다. 이 문서에서는 wait() 및 inform()을 사용하여 항목을 사용할 수 있거나 공간을 사용할 수 있을 때까지 스레드를 차단할 수 있도록 하는 데이터 구조인 차단 대기열을 구현하는 방법을 설명합니다.
조건 차단:
Java 코드:
public class BlockingQueue<T> { private Queue<T> queue = new LinkedList<>(); private int capacity; public BlockingQueue(int capacity) { this.capacity = capacity; } public synchronized void put(T element) throws InterruptedException { while (queue.size() == capacity) { wait(); } queue.add(element); notify(); // notifyAll() for multiple producer/consumer threads } public synchronized T take() throws InterruptedException { while (queue.isEmpty()) { wait(); } T item = queue.remove(); notify(); // notifyAll() for multiple producer/consumer threads return item; } }
Java 1.5에서는 더 높은 수준의 동시성 라이브러리를 도입했습니다. 추상화:
수정된 차단 대기열 구현:
public class BlockingQueue<T> { private Queue<T> queue = new LinkedList<>(); private int capacity; private Lock lock = new ReentrantLock(); private Condition notFull = lock.newCondition(); private Condition notEmpty = lock.newCondition(); public BlockingQueue(int capacity) { this.capacity = capacity; } public void put(T element) throws InterruptedException { lock.lock(); try { while (queue.size() == capacity) { notFull.await(); } queue.add(element); notEmpty.signal(); } finally { lock.unlock(); } } public T take() throws InterruptedException { lock.lock(); try { while (queue.isEmpty()) { notEmpty.await(); } T item = queue.remove(); notFull.signal(); return item; } finally { lock.unlock(); } } }
위 내용은 Java에서 차단 대기열을 구현하기 위해 `wait()` 및 `notify()`를 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!