SynchronousQueue:
同步队列的作用类似于一种匹配原则,它只能放一个东西进去。
场景:
一个线程放数据进去,另一个线程去取。放进去的线程放进去以后, 就要等待消费者去取, 只有取出来了才可以继续放进去,同时,消费者也是只有等生产者放进去才可以取, 如果没有, 就只有继续等待。
SynchronousQueue<String> queue = new SynchronousQueue<>();
new Thread(() -> {
try {
System.out.println(Thread.currentThread().getName() + "put 1");
queue.put("1");
System.out.println(Thread.currentThread().getName() + "put 1");
queue.put("1");
System.out.println(Thread.currentThread().getName() + "put 1");
queue.put("1");
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "T1").start();
new Thread(() -> {
try {
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName() + queue.take());
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName() + queue.take());
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName() + queue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "T2").start();