java实现FIFO(附完整源码)
时间: 2023-10-17 19:25:45 浏览: 168
以下是Java实现FIFO的代码:
```java
import java.util.LinkedList;
import java.util.Queue;
public class FIFO<T> {
private Queue<T> queue = new LinkedList<>();
private int maxSize;
public FIFO(int maxSize) {
this.maxSize = maxSize;
}
public synchronized void put(T item) throws InterruptedException {
while (queue.size() == maxSize) {
wait();
}
queue.offer(item);
notifyAll();
}
public synchronized T take() throws InterruptedException {
while (queue.isEmpty()) {
wait();
}
T item = queue.poll();
notifyAll();
return item;
}
}
```
在这个示例中,我们定义了一个名为FIFO的泛型类,它使用Queue实现了先进先出的队列。构造函数接收一个int类型的maxSize,表示队列的最大容量。
`put`方法用于向队列中添加一个元素。如果队列已满,则会一直等待,直到有空闲的位置。如果队列未满,则将元素添加到队列中,并唤醒其他可能在等待的线程。
`take`方法用于从队列中取出一个元素。如果队列为空,则会一直等待,直到队列中有元素。如果队列非空,则取出队头元素并返回,并唤醒其他可能在等待的线程。
注意,这个示例中的put和take方法都使用了synchronized关键字,以确保在多线程环境下的线程安全性。
希望这个示例能帮助你理解Java中如何实现FIFO。
阅读全文