import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class BlockingQueueExample {
public static void main(String[] args) {
// 创建一个容量为 10 的阻塞队列
BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(10);
// 生产者线程
Thread producerThread = new Thread(() -> {
try {
for (int i = 0; i < 20; i++) {
String message = "Message " + i;
System.out.println("Producing: " + message);
blockingQueue.put(message); // 如果队列已满,则等待直到有空间
Thread.sleep(100); // 模拟生产时间
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
// 消费者线程
Thread consumerThread = new Thread(() -> {
try {
for (int i = 0; i < 20; i++) {
String message = blockingQueue.take(); // 如果队列为空,则等待直到有元素
System.out.println("Consuming: " + message);
Thread.sleep(150); // 模拟消费时间
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
// 启动生产者和消费者线程
producerThread.start();
consumerThread.start();
// 等待线程执行完毕
try {
producerThread.join();
consumerThread.join();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
put
和 take
方法,可以确保线程安全并且在队列满或空时自动阻塞线程。上一篇:java 创建线程
下一篇:java 字符串反转
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站