📅  最后修改于: 2023-12-03 15:25:09.550000             🧑  作者: Mango
LinkedBlockingQueue是Java中并发包中的一种阻塞队列,与ArrayBlockingQueue类似,但更加高效。它支持两种操作:put和take,这两种操作都是阻塞的,阻塞队列的大小可以初始化,也可以不指定大小,大小为默认值Integer.MAX_VALUE。
以下是一个实现LinkedBlockingQueue API的Java程序:
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class LinkedBlockingQueueExample {
public static void main(String[] args) throws InterruptedException {
BlockingQueue<String> queue = new LinkedBlockingQueue<>();
//生产者线程
new Thread(() -> {
try {
//向队列中添加元素
queue.put("Java");
queue.put("Python");
queue.put("C++");
}
catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
//消费者线程
new Thread(() -> {
try {
//从队列中取出元素
System.out.println(queue.take());
System.out.println(queue.take());
System.out.println(queue.take());
}
catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
首先,我们创建了一个BlockingQueue接口的对象,由于我们需要使用LinkedBlockingQueue对象,所以我们实例化了一个LinkedBlockingQueue对象来存储数据:
BlockingQueue<String> queue = new LinkedBlockingQueue<>();
然后,我们创建了两个线程,一个生产者线程,一个消费者线程,分别用于向队列中添加元素和从队列中取出元素:
//生产者线程
new Thread(() -> {
try {
//向队列中添加元素
queue.put("Java");
queue.put("Python");
queue.put("C++");
}
catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
//消费者线程
new Thread(() -> {
try {
//从队列中取出元素
System.out.println(queue.take());
System.out.println(queue.take());
System.out.println(queue.take());
}
catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
当向队列中添加元素时,如果队列已满,那么线程就会阻塞等待,直到队列中有空余位置可以存储元素。当从队列中取出元素时,如果队列为空,那么线程也会阻塞等待,直到队列中有元素可以取出。
LinkedBlockingQueue是Java中并发包中的一种阻塞队列,支持高并发的操作,使用链表数据结构,效率比较高。通过使用LinkedBlockingQueue API,我们能够轻松地实现阻塞队列的操作,方便开发人员进行多线程编程。