- 博客(5)
- 资源 (5)
- 收藏
- 关注
原创 图解java.util.concurrent源码 (八)LinkedBlockingQueue
引言上一篇文章中分析了ArrayBlockingQueue的源码,说好这一篇文章中要继续分析LinkedBlockingQueue的源码并且对比他们的使用场景,在看这篇文章之前建议先看一下上一篇文章。LinkedBlockingQueue数据结构LinkedBlockingQueue底层是一个链表结构,入队时直接将节点连接在链表的后面,出队时直接将头结点剔除即可,核心的变量如下:ca...
2018-12-31 16:01:05 332
原创 图解java.util.concurrent源码 (七)ArrayBlockingQueue
引言在并发编程中经常需要进行生产者消费者之间的同步,此时我们最经常使用的同步工具就是有界阻塞队列(BlockingQueue)了,这篇文章和下一篇文章将分别分析最经常使用的两个有界队列,ArrayBlockingQueue和LinkedBlockingQueue的原理,然后对比他们的性能以及使用场景。BlockingQueue接口BlockingQueue接口定义了juc中阻塞队列的标准...
2018-12-30 20:48:16 243
原创 图解java.util.concurrent源码 (六)CyclicBarrier (循环栅栏)
引言上一篇文章提到,CountDownLatch不支持重置计数,如果你有反复重置计数的需求的话,最好使用CyclicBarrier。CyclicBarrier的中文名叫做"循环栅栏",能够让n个线程都到达同步点之后再让他们开始运行,之后CyclicBarrier就会重新计数,这个过程可以反复进行,甚至还可以在到达同步点与重新运行之间插入一段代码(叫做barrierAction)。Demo...
2018-12-25 00:58:57 323 2
原创 图解java.util.concurrent源码(五) CountDownLatch
引言今天分享一个比较简短一些的源码,那就是concurrent包中我们经常使用的CountDownLatch同步器,"latch"在英文中也是锁的意思,翻译成中文就是“倒数锁”,当你调用了这个类型对象中的await方法后,必须要等待这个锁倒数到0,才能继续运行。这个类的源码非常短,因为其实它就是对AQS共享模式的一个简单实现而已,如果你还不理解AQS的话,可以去看看我这个系列的第一篇文章和第...
2018-12-23 21:38:17 212
原创 提升并发程序性能(tps/qps)的几个技巧总结
引言之前参加中间件比赛,以及一些日常开发的经验,在这里总结了一些提升程序性能(qps/tps)的技巧,持续更新。一些只适用与比赛而不适合实际工程的技巧我会用斜体 (only race) 标注1、减小锁的粒度案例:ConcurrentHashMap采用分段锁提升了并发时map的性能SkipList(跳表):跳表相比红黑树的优势就是,红黑树的一次插入删除操作经常会导致全局的调整,导致整棵树...
2018-12-16 15:06:48 4864
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人