linkedblockingqueue的使用详细例子
时间: 2023-09-13 21:12:27 浏览: 101
LinkedBlockingQueue是Java中的一个线程安全的阻塞队列,它实现了BlockingQueue接口。它的内部实现是一个链表,可以无限制地添加元素,也可以限制容量,以防止过度膨胀。
下面是一个使用LinkedBlockingQueue的简单例子:
```java
import java.util.concurrent.LinkedBlockingQueue;
public class LinkedBlockingQueueDemo {
public static void main(String[] args) throws InterruptedException {
LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>(3);
// 添加元素到队列
queue.put(1);
queue.put(2);
queue.put(3);
System.out.println("队列大小为:" + queue.size());
// 阻塞等待队列中有元素被取走
System.out.println("取出队列中的第一个元素:" + queue.take());
System.out.println("队列大小为:" + queue.size());
// 添加元素到队列
queue.put(4);
System.out.println("队列大小为:" + queue.size());
// 阻塞等待队列中有元素被取走
System.out.println("取出队列中的第二个元素:" + queue.take());
System.out.println("队列大小为:" + queue.size());
}
}
```
输出结果为:
```
队列大小为:3
取出队列中的第一个元素:1
队列大小为:2
队列大小为:3
取出队列中的第二个元素:2
队列大小为:2
```
上述代码创建了一个容量为3的LinkedBlockingQueue队列,首先向队列中添加了三个元素,此时队列已经满了。接着取出队列中的第一个元素,然后再向队列中添加一个元素,此时队列又满了。最后取出队列中的第二个元素,此时队列中只剩下两个元素。
需要注意的是,LinkedBlockingQueue的put()方法和take()方法都是阻塞的。如果队列已满,put()方法会一直阻塞,直到队列中有空位。如果队列为空,take()方法会一直阻塞,直到队列中有元素被加入。因此,在使用LinkedBlockingQueue时需要注意在多线程环境下的线程安全问题。
阅读全文