blocked Queue

来源:互联网 发布:千里马计划软件下载 编辑:程序博客网 时间:2024/06/04 19:09

有几种blocked Queue
系统开发中,经常会用到 阻塞型的容器,适合于实现“消费者生产者”模式

转发

类图介绍

这里写图片描述

核心接口

放入数据

  • offer(anObject): 非阻塞, 表示如果可能的话,如可容纳,return true;
  • offer(E o, long timeout, TimeUnit unit), 阻塞+超时;
  • put(anObject): 一直阻塞;

获取数据

  • poll(time): 阻塞+超时, 取走首位的对象
  • take(): 一直阻塞, 取走排在首位的对象;
  • drainTo(): 批量获取所有可用的数据对象(还可以指定获取数据的个数), 提升获取数据效率;不需要多次分批加锁或释放锁。

ArrayBlockingQueue

LinkedBlockingQueue

它对头和尾(取和添加操作)采用两把不同的锁,相对于ArrayBlockingQueue提高了吞吐量

ConcurrentLinkedQueue

是一个无锁的queue实现,它采用了一种无锁算法(在API中有说明),相比于传统的同步的queue来说吞吐量可以大大提高,同时它也不同于BlockingQueue,并不单单提供阻塞操作。它主要的目的是通过采用无锁的算法,使得read/write操作均不需要对容器加锁,提高容器吞吐量

0 0