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中不起任何作用 synchronousQueue.clear(); //从队列移除元素到集合中 synchronousQueue.drainTo(); //从队列移除指定数量元素到集合中 synchronousQueue.drainTo(new ArrayList(), 3); //若没有对应的数据消费线程,则put方法将会导致当前线程进入阻塞 synchronousQueue.put(); //返回一个空迭代器 synchronousQueue.iterator();
一点点学习,一丝丝进步。不懈怠,才不会被时代淘汰