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();

 

posted @ 2023-04-05 23:01  余生请多指教ANT  阅读(43)  评论(0编辑  收藏  举报