首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

线程保险必须要通过synchronized实现吗

2013-03-10 
线程安全必须要通过synchronized实现吗?以前觉得线程安全,总是需要用synchronized实现。看JDK帮助文档(1.5

线程安全必须要通过synchronized实现吗?
以前觉得线程安全,总是需要用synchronized实现。
看JDK帮助文档(1.5以上),说ConcurrentLinkedQueue是线程安全的队列,但是看它的源码,似乎没有什么synchronized。感觉挺新鲜的。

线程安全必须要通过synchronized实现吗?
ConcurrentLinkedQueue是如何实现线程安全的?
有没有大神给解个惑,详细解释下呢?
[解决办法]
synchronized只是实现线程安全的一个手段.而且在很多情况下是代价最大的方法(并发性能下降严重).
所以有很多轻量级实现线程安全的手段,
语法方面有volatile,类库方面有java.util.concurrent包
ConcurrentLinkedQueue是通过cas操作来实现线程安全的.
以offer方法举例,简单来说,offer方法在一个无限循环中使用cas操作来向队尾插入节点,如果插入成功,则返回true跳出循环,如果插入失败,则继续循环直到成功,这样的方式就不用加任何锁也能保证并发情况下是线程安全的.
另外这里说的ConcurrentLinkedQueue这个类只是有条件的线程安全.

LZ如果对java并发有兴趣的话,可以看下《java concurrent in practice》这本书
[解决办法]
死锁、无锁算法,并发安全问题等,请关注:并发编程网

热点排行