SynchronousQueue
SynchronousQueue没有容量,与其他的 BlockingQueue 不同,SynchronousQueue是一个不会存储元素的BlockingQueue 。每一个put操作必须要等待一个take操作,否则不能继续添加元素,反之亦然。
public class Test2 {
public static void main(String[] args) {
SynchronousQueue queue = new SynchronousQueue();
new Thread(new Runnable() {
@Override
public void run() {
try {
System.out.println(Thread.currentThread().getName()+"开始put1");
queue.put("1");
System.out.println(Thread.currentThread().getName()+"开始put2");
queue.put("2");
System.out.println(Thread.currentThread().getName()+"开始put3");
queue.put("3");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"T1").start();
new Thread(new Runnable() {
@Override
public void run() {
try {
TimeUnit.SECONDS.sleep(2);
System.out.println(Thread.currentThread().getName()+"开始取出1");
queue.take();
TimeUnit.SECONDS.sleep(2);
System.out.println(Thread.currentThread().getName()+"开始取出2");
queue.take();
TimeUnit.SECONDS.sleep(2);
System.out.println(Thread.currentThread().getName()+"开始取出3");
queue.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"T2").start();
}
}