假设我们使用 BlockingQueue 来实现一个生产者和消费者模式,其中生产者将数字添加到队列中,而消费者将数字从队列中取出并打印出来。在这个例子中,我们使用了 add() 方法来向队列中添加数字。
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ArrayBlockingQueue;
public class ProducerConsumerExample {
public static void main(String[] args) {
// 创建一个大小为10的阻塞队列
BlockingQueue queue = new ArrayBlockingQueue<>(10);
// 创建一个生产者并启动它
Producer producer = new Producer(queue);
producer.start();
// 创建两个消费者并启动它们
Consumer consumer1 = new Consumer(queue);
Consumer consumer2 = new Consumer(queue);
consumer1.start();
consumer2.start();
}
}
class Producer extends Thread {
private BlockingQueue queue;
public Producer(BlockingQueue queue) {
this.queue = queue;
}
@Override
public void run() {
for (int i = 0; i < 20; i++) {
try {
// 向队列中添加数字
queue.add(i);
System.out.println("生产者生产了:" + i);
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer extends Thread {
private BlockingQueue queue;
public Consumer(BlockingQueue queue) {
this.queue = queue;
}
@Override
public void run() {
while (true) {
try {
// 从队列中取出数字并打印
int num = queue.take();
System.out.println("消费者消费了:" + num);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
在上面的例子中,我们使用了 BlockingQueue 的 add() 方法来向队列中添加数字。这个方法会在队列已满的情况下抛出 IllegalStateException 异常,因此我们需要使用 try-catch 语句来捕获异常。如果队列未满,则会将数字添加到队列中,并返回 true。 免责声明:本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。