SynchronousQueue
解释:
同步队列
介绍
-
实现了BlockingQueue 和 Queue
-
其中每个插入操作必须等待另一个线程相应的删除操作
-
同步队列没有任何容量,甚至没有一个容量
- 如果你想放入一个元素,就必须有另外一个线程尝试从中移除元素
使用
因为实现了BlockingQueue,所以他存在与BlockingQueue一模一样的api操作,但是却存在了很多的区别
- 因为无法插入元素,所以add与remove是无法使用的,Add会直接抛出异常
- offer与poll也会抛出异常
- 但是put和take存在超时等待,存在一个等待机制,所以是可以实现插入与删除的
无法插入
显示Queue full
public static void main(String[] args) {
SynchronousQueue<Object> synchronousQueue = new SynchronousQueue<>();
new Thread(()->{
try {
synchronousQueue.put("a");
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("添加");
}).start();
new Thread(() -> {
Object poll = null;
try {
poll = synchronousQueue.take();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("移除"+poll);
}).start();
}