线程安全必须要通过synchronized实现吗?

oh_Maxy 2013-03-07 10:40:34
以前觉得线程安全,总是需要用synchronized实现。
看JDK帮助文档(1.5以上),说ConcurrentLinkedQueue是线程安全的队列,但是看它的源码,似乎没有什么synchronized。感觉挺新鲜的。

线程安全必须要通过synchronized实现吗?
ConcurrentLinkedQueue是如何实现线程安全的?
有没有大神给解个惑,详细解释下呢?
...全文
331 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
foreseer 2013-05-28
  • 打赏
  • 举报
回复
下面这篇说的很好,可以看看。 https://www.ibm.com/developerworks/cn/java/j-lo-concurrent/
Sunny_kaka 2013-03-07
  • 打赏
  • 举报
回复
引用 3 楼 oh_Maxy 的回复:
引用 2 楼 Sunny_kaka 的回复:synchronized只是实现线程安全的一个手段.而且在很多情况下是代价最大的方法(并发性能下降严重). 所以有很多轻量级实现线程安全的手段, 语法方面有volatile,类库方面有java.util.concurrent包 ConcurrentLinkedQueue是通过cas操作来实现线程安全的. 以offer方法……
cocurrent可以看成一个概念,更确切的说是个编程领域问题. java.util.cocurrent包中就包含了一些在java中更方便高效解决这个问题的一些工具类和接口.
a597926661 2013-03-07
  • 打赏
  • 举报
回复
引用 2 楼 Sunny_kaka 的回复:
synchronized只是实现线程安全的一个手段.而且在很多情况下是代价最大的方法(并发性能下降严重). 所以有很多轻量级实现线程安全的手段, 语法方面有volatile,类库方面有java.util.concurrent包 ConcurrentLinkedQueue是通过cas操作来实现线程安全的. 以offer方法举例,简单来说,offer方法在一个无限循环中使用cas操作来向队尾插……
++ 虽不明 但觉厉
oh_Maxy 2013-03-07
  • 打赏
  • 举报
回复
引用 2 楼 Sunny_kaka 的回复:
synchronized只是实现线程安全的一个手段.而且在很多情况下是代价最大的方法(并发性能下降严重).
所以有很多轻量级实现线程安全的手段,
语法方面有volatile,类库方面有java.util.concurrent包
ConcurrentLinkedQueue是通过cas操作来实现线程安全的.
以offer方法举例,简单来说,offer方法在一个无限循环……


受教了,回去看看你推荐的材料~
它的无限循环的思路,是不是插入失败,就一直循环插入,直到成功了就return是吧?
另外,我理解concurrent只是一个概念,用这种思路实现的类,都放到这个包里了,并不存在某个具体的抽象类或者操作,是这个意思把?
Sunny_kaka 2013-03-07
  • 打赏
  • 举报
回复
synchronized只是实现线程安全的一个手段.而且在很多情况下是代价最大的方法(并发性能下降严重). 所以有很多轻量级实现线程安全的手段, 语法方面有volatile,类库方面有java.util.concurrent包 ConcurrentLinkedQueue是通过cas操作来实现线程安全的. 以offer方法举例,简单来说,offer方法在一个无限循环中使用cas操作来向队尾插入节点,如果插入成功,则返回true跳出循环,如果插入失败,则继续循环直到成功,这样的方式就不用加任何锁也能保证并发情况下是线程安全的. 另外这里说的ConcurrentLinkedQueue这个类只是有条件的线程安全. LZ如果对java并发有兴趣的话,可以看下《java concurrent in practice》这本书
zhzeqiang 2013-03-07
  • 打赏
  • 举报
回复
线程安全不一定必须用synchronized
oh_Maxy 2013-03-07
  • 打赏
  • 举报
回复
引用 8 楼 ticmy 的回复:
死锁、无锁算法,并发安全问题等,请关注:并发编程网
嗯,晚上回去看看~
liujun3512159 2013-03-07
  • 打赏
  • 举报
回复
不一定吧,我觉的
龙四 2013-03-07
  • 打赏
  • 举报
回复
死锁、无锁算法,并发安全问题等,请关注:并发编程网
oh_Maxy 2013-03-07
  • 打赏
  • 举报
回复
引用 5 楼 Sunny_kaka 的回复:
引用 3 楼 oh_Maxy 的回复:引用 2 楼 Sunny_kaka 的回复:synchronized只是实现线程安全的一个手段.而且在很多情况下是代价最大的方法(并发性能下降严重). 所以有很多轻量级实现线程安全的手段, 语法方面有volatile,类库方面有java.util.concurrent包 ConcurrentLinkedQueue是通过cas操作……
那个,之前没发过,不晓得怎么把分给你,回去研究研究。。。
oh_Maxy 2013-03-07
  • 打赏
  • 举报
回复
引用 5 楼 Sunny_kaka 的回复:
引用 3 楼 oh_Maxy 的回复:引用 2 楼 Sunny_kaka 的回复:synchronized只是实现线程安全的一个手段.而且在很多情况下是代价最大的方法(并发性能下降严重). 所以有很多轻量级实现线程安全的手段, 语法方面有volatile,类库方面有java.util.concurrent包 ConcurrentLinkedQueue是通过cas操作……
Ok,I see~

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧