import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class BlockingQueueExample {
public static void main(String[] args) {
// 创建一个容量为 10 的阻塞队列
BlockingQueue<Integer> blockingQueue = new ArrayBlockingQueue<>(10);
// 生产者线程
Thread producer = new Thread(() -> {
for (int i = 0; i < 20; i++) {
try {
// 将元素放入队列,如果队列已满则等待
blockingQueue.put(i);
System.out.println("Produced: " + i);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
});
// 消费者线程
Thread consumer = new Thread(() -> {
for (int i = 0; i < 20; i++) {
try {
// 从队列中取出元素,如果队列为空则等待
Integer value = blockingQueue.take();
System.out.println("Consumed: " + value);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
});
// 启动生产者和消费者线程
producer.start();
consumer.start();
// 等待两个线程执行完毕
try {
producer.join();
consumer.join();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
创建阻塞队列:
ArrayBlockingQueue 创建了一个容量为 10 的阻塞队列。ArrayBlockingQueue 是一个由数组支持的有界阻塞队列。生产者线程:
put 方法将元素放入队列。如果队列已满,则 put 方法会阻塞,直到队列中有可用的空间。消费者线程:
take 方法从队列中取出元素。如果队列为空,则 take 方法会阻塞,直到队列中有可用的元素。启动线程并等待完成:
join 方法等待它们执行完毕。这个示例展示了如何使用 Java 的阻塞队列来实现简单的生产者-消费者模式。
上一篇:java float取值范围
下一篇:java tree
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站