同步队列SynchronousQueue
小于 1 分钟JavaJUC并发编程
同步队列SynchronousQueue

没有容量,进去一个元素,必须等待取出来之后,才能再放一个元素。SynchronousQueue不存储元素,put了一个元素,必须从里面先take处理,否则不能在put进去值。
/**
* @Desc 同步队列
* @Author HeJin
* @Date 2021/3/12 13:33
*/
public class SynchronousQueueDemo {
public static void main(String[] args) {
BlockingQueue<String> blockingQueue = new SynchronousQueue<>();
new Thread(() -> {
try {
System.out.println(Thread.currentThread().getName()+" put 1");
blockingQueue.put("1");
System.out.println(Thread.currentThread().getName()+" put 2");
blockingQueue.put("2");
System.out.println(Thread.currentThread().getName()+" put 3");
blockingQueue.put("3");
} catch (InterruptedException e) {
e.printStackTrace();
}
},"t1").start();
new Thread(() -> {
try {
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName() + " take " + blockingQueue.take());
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName() + " take " + blockingQueue.take());
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName() + " take " + blockingQueue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
},"t2").start();
}
}
结果:
t1 put 1
t2 take 1
t1 put 2
t2 take 2
t1 put 3
t2 take 3
Process finished with exit code 0