import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class BlockingQueueExample {
public static void main(String[] args) {
// 创建一个容量为 5 的阻塞队列
BlockingQueue<String> queue = new ArrayBlockingQueue<>(5);
// 生产者线程
Thread producerThread = new Thread(() -> {
try {
for (int i = 0; i < 10; i++) {
String message = "Message-" + i;
System.out.println("Producing: " + message);
queue.put(message); // 如果队列满了,put() 会阻塞直到有空位
Thread.sleep(1000); // 模拟生产时间
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
// 消费者线程
Thread consumerThread = new Thread(() -> {
try {
for (int i = 0; i < 10; i++) {
String message = queue.take(); // 如果队列为空,take() 会阻塞直到有元素
System.out.println("Consuming: " + message);
Thread.sleep(2000); // 模拟消费时间
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
// 启动生产者和消费者线程
producerThread.start();
consumerThread.start();
// 等待线程结束
try {
producerThread.join();
consumerThread.join();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
BlockingQueue 接口的一个固定大小的队列。当队列满时,put() 方法会阻塞,直到队列中有空位;当队列空时,take() 方法会阻塞,直到队列中有元素。queue.put() 方法将消息放入队列中,如果队列已满,则该方法会阻塞,直到有空位为止。queue.take() 方法从队列中取出消息,如果队列为空,则该方法会阻塞,直到队列中有元素为止。上一篇:java获取当前年月
下一篇:java匿名内部类
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站