并发队列

  • ConcurrentLinkedQueue
  • LinkedBlockingQueue
  • ArrayBlockingQueue
  • PriorityBlockingQueue
  • DelayQueue

并发的队列主要分为阻塞队列非阻塞队列阻塞队列使用锁实现,非阻塞队列使用CAS实现


ConcurrentLinkedQueue:线程安全的无界非阻塞队列,使用单向链表存储,入队和出队使用CAS实现


ConcurrentLinkedQueue.png

常用的操作:

  • offer:队尾添加元素,使用CAS
  • add:内部调用offer 进行添加
  • poll:队头获取并移除元素:使用CAS
  • peek:获取队头元素,不移除:使用CAS
  • size:计算队列个数,并发环境不是很有用,因为CAS没有加锁,在计算期间可能用删除或者添加
  • remove(obj):如果存在则删除,如果有多个则删除第一个:使用CAS
  • contains:遍历判断是否含有,结果与size 函数类似也不是很准确

LinkedBlockingQueue:使用独占锁ReentrantLock实现的阻塞安全队列,默认容量是0x7ffffff,用户也可以自己指定容量,所以从一定意义上说是一个有界阻塞队列


LinkedBlockingQueue.png

ArrayBlockingQueue:内部使用有界数组进行存储


ArrayBlockingQueue.png

put 和take 使用条件变量condition
offer 和poll通过简单的加锁进行操作


PriorityBlockingQueue:带有优先级的无界阻塞队列,每次出队返回优先级最高或者最低的元素,内部使用平衡二叉树堆实现
PriorityBlockingQueue使用


DelayQueue:无界阻塞延迟队列,队列中每个元素都有过期时间,获取元素时,只有过期元素才会出队列,队头元素是最快过期的,内部使用PriorityBlockingQueue存储
DelayQueue使用

你可能感兴趣的:(并发队列)