blockingQueue接口的详解!

https://www.cnblogs.com/xuxiuxiu/p/6830485.html

BlockingQueue接口  

      ArrayBlockingQueue:基于数组的阻塞队列实现,在ArrayBlockingQueue内部,维护了一个定长数组,
      以便缓存队列中的数据对象,其内部没实现读写分离,也就童味着生产和消费不能完全并行,
      长度是需要定义的,可以指定先进先出成者先进后出,也叫有界队列。在很多场合非常适合使用。

      LinkedBlockingQueue:基于链表的风塞队列,同ArrayBlockingQueue类似. 其内部也维持着一
      个数据缓冲队列(该队列由一个链表构成) ,LinkedBlockingQueue之 所以能够高效的处理并发数据,
      是因为其内部实现采用分高锁(读写分高两个锁),从而实现生产者和消费者操作的完全并行运行。
      他是一一个无界队列。

      SynchronousQueue-种没有缓冲的队列, 生产者产生的数据直接会被消费者获取并消费.

      PrioriyBlockingQueue;基于优先级的阻离队列(优先级的判断通过构造所数传入的Compator对象来决定,
      也就是说传入队列的对象必须实现Comparable接口),在实现PriorityBlockingQueue时,
      内部控制线程同步的锁采用的是公平锁。他也是一一个无界的队列。

      DelayQueue;带有延迟时间的Queue,其中的元素只有当其指定的延迟时间到了,
      才能够从队列中获取到该元素。DelayQueue中的 元素必须实现Delayed接口,
      DelayQueue是一个没有大小限制的队列,应用场景很多,比如对缓存超时的数据进行移除、
      任务超时处理、空闲连接的关闭等等。
      

1.1offer(anObject):表示如果可能的话,将anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,
    则返回true,否则返回false.(本方法不阻塞当前执行方法的线程)

  1.2offer(E o, long timeout, TimeUnit unit),可以设定等待的时间,如果在指定的时间内,还不能往队列中
    加入BlockingQueue,则返回失败。
  1.3put(anObject):把anObject加到BlockingQueue里,如果BlockQueue没有空间,则调用此方法的线程被阻断
    直到BlockingQueue里面有空间再继续.
        获取数据:
  1.4 poll(time):取走BlockingQueue里排在首位的对象,若不能立即取出,则可以等time参数规定的时间,
    取不到时返回null;
  1.5 poll(long timeout, TimeUnit unit):从BlockingQueue取出一个队首的对象,如果在指定时间内,
    队列一旦有数据可取,则立即返回队列中的数据。否则知道时间超时还没有数据可取,返回失败。
  1.6 take():取走BlockingQueue里排在首位的对象,若BlockingQueue为空,阻断进入等待状态直到
    BlockingQueue有新的数据被加入; 
  drainTo():一次性从BlockingQueue获取所有可用的数据对象(还可以指定获取数据的个数), 
    通过该方法,可以提升获取数据效率;不需要多次分批加锁或释放锁。

猜你喜欢

转载自blog.csdn.net/weixin_41244495/article/details/83373781