SynchronousQueue 同步队列没有容量,进去一个元素,必须等待取出来之后,才能再往里面放入一个元素!
put,take!
/**
* 同步队列
* 和其他的BlockingQueue不一样,SynchronousQueue,不存储元素
* put一个元素后,必须要取出这个元素才能put另一个元素。
*/
public class SynchronousQueueDemo {
public static void main(String[] args) throws InterruptedException {
SynchronousQueue<String> synchronousQueue = new SynchronousQueue<>();//同步队列
new Thread(()->{
try {
System.out.println(Thread.currentThread().getName()+"put 1");
synchronousQueue.put("1");
System.out.println(Thread.currentThread().getName()+"put 2");
synchronousQueue.put("2");
System.out.println(Thread.currentThread().getName()+"put 3");
synchronousQueue.put("3");
} catch (InterruptedException e) {
e.printStackTrace();
}
},"A").start();
new Thread(()->{
try {
TimeUnit.SECONDS.sleep(2);
System.out.println(Thread.currentThread().getName()+"取 1");
synchronousQueue.take();
TimeUnit.SECONDS.sleep(2);
System.out.println(Thread.currentThread().getName()+"取 2");
synchronousQueue.take();
TimeUnit.SECONDS.sleep(2);
System.out.println(Thread.currentThread().getName()+"取 3");
synchronousQueue.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
},"B").start();
}
}