SynchronousQueue同步队列
SynchronousQueue
*同步队列
- 和其他的BlockingQueue不一样 SynchronousQueue不存储元素
- put一个元素,必须先取出来,否则不能再put元素进去
package SynchronousQueueA;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;
/**
*同步队列
* 和其他的BlockingQueue不一样 SynchronousQueue不存储元素
* put一个元素,必须先取出来,否则不能再put元素进去
*
* @author liu
*/
public class Demo01 {
public static void main(String[] args) {
//同步队列
BlockingQueue<String> synchronousQueue = new SynchronousQueue<String>();
new Thread(() -> {
try {System.out.println(Thread.currentThread().getName() + "put a");
synchronousQueue.put("a");
System.out.println(Thread.currentThread().getName() + "put b");
synchronousQueue.put("b");
System.out.println(Thread.currentThread().getName() + "put c");
synchronousQueue.put("c");
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println();
}, "T1").start();
new Thread(() -> {
try {
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName() +"-->" +synchronousQueue.take());
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName() + "-->" +synchronousQueue.take());
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName() +"-->" + synchronousQueue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println();
}, "T2").start();
}
}