以前觉得线程安全,总是需要用synchronized实现。
看JDK帮助文档(1.5以上),说ConcurrentLinkedQueue是线程安全的队列,但是看它的源码,似乎没有什么synchronized。感觉挺新鲜的。线程安全必须要通过synchronized实现吗?
ConcurrentLinkedQueue是如何实现线程安全的?
有没有大神给解个惑,详细解释下呢?
看JDK帮助文档(1.5以上),说ConcurrentLinkedQueue是线程安全的队列,但是看它的源码,似乎没有什么synchronized。感觉挺新鲜的。线程安全必须要通过synchronized实现吗?
ConcurrentLinkedQueue是如何实现线程安全的?
有没有大神给解个惑,详细解释下呢?
所以有很多轻量级实现线程安全的手段,
语法方面有volatile,类库方面有java.util.concurrent包
ConcurrentLinkedQueue是通过cas操作来实现线程安全的.
以offer方法举例,简单来说,offer方法在一个无限循环中使用cas操作来向队尾插入节点,如果插入成功,则返回true跳出循环,如果插入失败,则继续循环直到成功,这样的方式就不用加任何锁也能保证并发情况下是线程安全的.
另外这里说的ConcurrentLinkedQueue这个类只是有条件的线程安全.LZ如果对java并发有兴趣的话,可以看下《java concurrent in practice》这本书
受教了,回去看看你推荐的材料~
它的无限循环的思路,是不是插入失败,就一直循环插入,直到成功了就return是吧?
另外,我理解concurrent只是一个概念,用这种思路实现的类,都放到这个包里了,并不存在某个具体的抽象类或者操作,是这个意思把?
cocurrent可以看成一个概念,更确切的说是个编程领域问题.
java.util.cocurrent包中就包含了一些在java中更方便高效解决这个问题的一些工具类和接口.
https://www.ibm.com/developerworks/cn/java/j-lo-concurrent/