美文网首页
并发队列

并发队列

作者: 打杂的_e2c9 | 来源:发表于2020-04-22 13:56 被阅读0次
  • 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使用

相关文章

  • iOS GCD笔记

    串行队列 并发队列 主队列 全局并发队列 同步执行 异步执行 同步+并发队列 = 没有开启新线程,串行执行任务 s...

  • iOS 的串行队列和并发队列中的任务是如何执行的

    我们都知道队列有串行队列和并发队列,主队列就属于串行队列,串行队列里面的任务是按顺序执行,并发队列里的任务是并发执...

  • GCD简单使用

    队列类型 并发队列(Concurrent Dispatch Queue)任务并发(同步)执行 串行队列(Seria...

  • 多线程的运用

    同步串行队列 同步并发队列 异步串行队列 异步并发队列 队列组 栅栏 队列组和栅栏的组合 信号量 死锁主线程 分析...

  • iOS开发-队列和同步异步执行的结果分析

    多线程中的队列有:串行队列,并发队列,全局队列(并发),主队列(串行)。 执行的方法有:同步执行和异步执行。 提到...

  • iOS GCD

    任务和队列的创建方法 / 获取方法 队列的创建方法 / 获取方法 串行队列的创建方法 并发队列的创建方法。并发队列...

  • iOS多线程-队列优先级

    全局队列 全局队列(本质上并发队列)

  • GCD队列使用

    使用GCD前,先对队列总结一下: 串行和并发 GCD中队列分为两种:串行队列、并发队列。串行队列:任务按在队列里的...

  • 如何设计高并发接口?

    并发队列的选择 Java的并发包提供了三种常见的并发队列实现:arrayblockingqueue、concurr...

  • GCD篇(1)

    GCD的队列有两种,一种是串行队列,一种是并发队列。 并行与并发的区别 并发(concurrency) 并行(pa...

网友评论

      本文标题:并发队列

      本文链接:https://www.haomeiwen.com/subject/elpbihtx.html