package com.neutron.t22;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.SynchronousQueue;
/**
* SynchronizedQueue
* 是特殊的LinkedTransferQueue,内部调用的是LinkedTransferQueue
* SynchronizedQueue是容量为0的队列,生产的东西必须马上消费掉
*
* 使用场景消费者线程先启动,生产者去生产首先找有没有消费者,如果有消费者就不扔到队列,直接给消费者
*/
public class T229SynchronizedQueue {
static void m1() throws InterruptedException {
BlockingQueue<String> queue = new SynchronousQueue<>();
// 消费者线程启动
new Thread(() -> {
try {
System.out.println(queue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "client").start();
queue.put("sss"); // put阻塞等待消费者消费
// queue.add("sss"); // Exception in thread "main" java.lang.IllegalStateException: Queue full
System.out.println(queue.size());
}
/**
*
*/
public static void main(String[] args) throws InterruptedException {
m1();
}
}thread42 - SynchronizedQueue
最新推荐文章于 2024-09-10 09:14:43 发布
本文深入探讨了SynchronousQueue的工作原理及使用场景。SynchronousQueue作为特殊类型的并发队列,其容量为0,确保了生产者生产的元素必须立即被消费者消费。文章通过示例代码展示了如何在实际应用中启动消费者线程并进行同步数据交换。
1844





