SynchronousQueue介绍
/**
* 拥有公平(FIFO)和非公平(LIFO)策略
* SynchronousQueue没有容量,是无缓冲等待队列,是一个不存储元素的阻塞队列,会直接将任务交给消费者,必须等队列中的添加元素被消费后才能继续添加新的元素
* 同步Queue,属于线程安全的BlockingQueue的一种,此队列设计的理念类似于"单工模式",对于每个put/offer操作,
* 必须等待一个take/poll操作,类似于我们的现实生活中的"火把传递":一个火把传递地他人,需要2个人"触手可及"才行.
* 因为这种策略,最终导致队列中并没有一个真正的元素;这是一种pipleline思路的基于queue的"操作传递".
*/
//非公平策略
SynchronousQueue synchronousQueue = new SynchronousQueue();
// //指定公平策略
// SynchronousQueue synchronousQueue = new SynchronousQueue(true);
synchronousQueue.offer();
synchronousQueue.offer(1, 3, TimeUnit.SECONDS);
//总是为空
synchronousQueue.isEmpty();
//总会返回null,硬编码.
synchronousQueue.peek();
//总是返回false
synchronousQueue.contains();
//判断集合是否为空
synchronousQueue.containsAll();
//以上四个方法均不支持,因为这个队列不存储元素
//获取并删除一个元素,如果此时有其他线程正在被put阻塞(即其他线程提交元素正等待被接收)或者"碰巧"有offer操作,那么将返回true,否则返回false
//限定时间内删除一个元素
synchronousQueue.poll(3, TimeUnit.SECONDS);
//删除一个元素头部元素,没有就返回空
synchronousQueue.poll();
//移除队列头部元素,没有的话阻塞等待
synchronousQueue.take()
//清空队列的方法在SynchronousQueue中不起任何作用
synchronousQueue.clear();
//从队列移除元素到集合中
synchronousQueue.drainTo();
//从队列移除指定数量元素到集合中
synchronousQueue.drainTo(new ArrayList(), 3);
//若没有对应的数据消费线程,则put方法将会导致当前线程进入阻塞
synchronousQueue.put();
//向尾部插入元素,成功true,失败false
synchronousQueue.offer()
//添加失败抛出异常
synchronousQueue.add()
//返回一个空迭代器
synchronousQueue.iterator();
本文来自博客园,作者:余生请多指教ANT,转载请注明原文链接:https://www.cnblogs.com/wangbiaohistory/p/17291264.html

浙公网安备 33010602011771号