Java LinkedBlockingQueue put()方法示例
LinkedBlockingQueue是Java中线程安全的阻塞队列。在LinkedBlockingQueue中,put()方法是一个能够阻塞当前线程,直到队列中有空闲的空间可以添加元素的方法。本文将为您介绍如何使用LinkedBlockingQueue的put()方法。
语法
put()方法的语法如下所示:
public void put(E e) throws InterruptedException
put方法将指定的元素插入此队列中,如果队列已满,则阻塞等待可用的空间。实际上,此方法等效于add方法,只是当队列已满时它将永远等待,而add方法则抛出IllegalStateException。
示例
下面是一个使用put()方法的示例程序:
import java.util.concurrent.LinkedBlockingQueue;
public class LinkedBlockingQueueExample {
public static void main(String[] args) {
LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<>(5);
Producer producer = new Producer(queue);
Consumer consumer = new Consumer(queue);
new Thread(producer).start();
new Thread(consumer).start();
}
}
class Producer implements Runnable {
private LinkedBlockingQueue<String> queue;
Producer(LinkedBlockingQueue<String> queue) {
this.queue = queue;
}
@Override
public void run() {
try {
for (int i = 0; i < 10; i++) {
String element = "element " + i;
queue.put(element);
System.out.println("Produced " + element);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class Consumer implements Runnable {
private LinkedBlockingQueue<String> queue;
Consumer(LinkedBlockingQueue<String> queue) {
this.queue = queue;
}
@Override
public void run() {
try {
while (true) {
String element = queue.take();
System.out.println("Consumed " + element);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
在本示例程序中,我们创建了一个大小为5的LinkedBlockingQueue。我们使用两个线程,一个线程是Producer,往队列中添加元素;另一个线程是Consumer,从队列中取出元素。
在Producer线程的run()方法中,我们往队列中添加了10个元素。如果队列已满,put方法会阻塞直到队列中有空闲的空间可以添加元素。在Consumer线程的run方法中,我们从队列中取出元素。如果队列为空,take方法会等待直到队列中有元素。
结论
通过本文的介绍,我们了解了LinkedBlockingQueue的put()方法的用法,它能够阻塞当前线程,直到队列中有空闲的空间可以添加元素。在多线程的编程中,我们可以使用LinkedBlockingQueue的put()方法来实现线程间的同步和协作。