java写一个阻塞队列
时间: 2023-03-25 20:00:51 浏览: 220
阻塞队列是一种线程安全的队列,当队列为空时,从队列中获取元素的操作会被阻塞,直到队列中有新的元素加入;当队列已满时,向队列中添加元素的操作会被阻塞,直到队列中有空闲位置。
Java中提供了多种阻塞队列的实现,如ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue等。
以下是使用Java编写一个简单的阻塞队列的示例代码:
```
import java.util.LinkedList;
public class BlockingQueue<T> {
private LinkedList<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);
notifyAll();
}
public synchronized T take() throws InterruptedException {
while (queue.isEmpty()) {
wait();
}
T element = queue.remove();
notifyAll();
return element;
}
}
```
该阻塞队列使用了一个LinkedList作为底层数据结构,并提供了put和take方法用于向队列中添加元素和获取元素。在put和take方法中,使用了synchronized关键字来保证线程安全,并使用wait和notifyAll方法来实现阻塞和唤醒操作。当队列已满时,put方法会一直阻塞,直到队列中有空闲位置;当队列为空时,take方法会一直阻塞,直到队列中有新的元素加入。
阅读全文