您的位置:首页 > 编程语言 > Java开发

ConcurrentLinkedQueue源码分析(基于JDK8,目前比较好的分析)

2016-06-25 09:23 351 查看
ConcurrentLinkedQueue作为Doug Lea在JDK5.0推出的又一个并发容器,使用的是基于FIFO的队列结构,在队尾入队,在队首出队,但使用的基于CAS的”wait-free”进行的,也就是线程竞争锁失败后不会挂起,这在一定程度使得线程的等待时间减少,但CAS并不是一个算法,它是一个CPU直接支持的硬件指令,这也就在一定程度上决定了它的平台相关性

当前常用的多线程同步机制可以分为下面三种类型:

volatile 变量:轻量级多线程同步机制,不会引起上下文切换和线程调度。仅提供内存可见性保证,不提供原子性。
CAS 原子指令:轻量级多线程同步机制,不会引起上下文切换和线程调度。它同时提供内存可见性和原子化更新保证。
互斥锁:重量级多线程同步机制,可能会引起上下文切换和线程调度,它同时提供内存可见性和原子性。

注:上下文切换就是CPU在不同线程中分配时间片,在不同线程任务中切换

ConcurrentLinkedQueue 的非阻塞算法实现主要可概括为下面几点:

点击我的博客观看更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: