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();}
}
恭喜你,又拿下一个知识点,也欢迎来加入进阶版知识星球,内容更精彩!(长按下方图片,识别二维码)