SynchronousQueue是BlockingQueue接口的一个实现类之一
这个属于基础性问题,老规矩,我们将从使用场景和代码示例来进行讲解
来,思考片刻,给出你的答案
1,使用场景
- 实现:特殊的无缓冲队列,每一个插入操作必须等待一个对应的移除操作,反之亦然。
- 场景:适用于生产者和消费者的节奏高度同步的情况,例如“任务分配”场景,每个任务直接交给一个等待的消费者处理。
2,代码示例
import java.util.concurrent.SynchronousQueue;
public class SynchronousQueueExample {
static final SynchronousQueue<String> queue = new SynchronousQueue<>();
public static void main(String[] args) throws InterruptedException {
Thread producer = new Thread(() -> {
try {
for (int i = 0; i < 20; i++) {
String item = "Item " + i;
queue.put(item); // 生产者必须等到消费者准备就绪
System.out.println("Produced: " + item);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
Thread consumer = new Thread(() -> {
try {
while (true) {
String item = queue.take(); // 消费者必须等到有生产者放入元素
System.out.println("Consumed: " + item);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
producer.start();
consumer.start();
// 等待producer完成
producer.join();
// 中断消费者
consumer.interrupt();
}
}
恭喜你,又拿下一个知识点,也欢迎来加入进阶版知识星球,内容更精彩!(长按下方图片,识别二维码)