论坛首页 Java企业应用论坛

讨论:同步VS线程安全

浏览 11473 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (2)
作者 正文
   发表时间:2012-03-10  
freish 写道
lyb520320 写道
feikiss 写道
我的个人观点吧,在Java中加锁sychronized并不能保证一定是线程安全的,所以设计模式中出现了double-checked locking模式。

在Java中加锁sychronized并不能保证一定是线程安全的
那JAVA加这个东西有什么用?好好理解JAVA的锁机制和volatile关键字的含义。




确实,用了锁并不一定就表示是线程安全的了

譬如一个变量,写的时候用锁了,读的时候没有用锁,依然不是线程安全的[color=red][/color]

只有充分同步,才能保证线程安全,至于如何做到充分同步,这就是考验程序员对java并发掌握程度的时候了





你这样的是有问题的同步写法
0 请登录后投票
   发表时间:2012-03-10  
spyker 写道
freish 写道
lyb520320 写道
feikiss 写道
我的个人观点吧,在Java中加锁sychronized并不能保证一定是线程安全的,所以设计模式中出现了double-checked locking模式。

在Java中加锁sychronized并不能保证一定是线程安全的
那JAVA加这个东西有什么用?好好理解JAVA的锁机制和volatile关键字的含义。




确实,用了锁并不一定就表示是线程安全的了

譬如一个变量,写的时候用锁了,读的时候没有用锁,依然不是线程安全的[color=red][/color]

只有充分同步,才能保证线程安全,至于如何做到充分同步,这就是考验程序员对java并发掌握程度的时候了





你这样的是有问题的同步写法

of course,但它却是是同步
0 请登录后投票
   发表时间:2012-03-11  
feikiss 写道
我的个人观点吧,在Java中加锁sychronized并不能保证一定是线程安全的,所以设计模式中出现了double-checked locking模式。

双重锁定在java中无效。。
0 请登录后投票
   发表时间:2012-03-11  
jinnianshilongnian 写道
feikiss 写道
我的个人观点吧,在Java中加锁sychronized并不能保证一定是线程安全的,所以设计模式中出现了double-checked locking模式。


double check 是为了 避免无用同步的,将锁最小化

一般在单例中lazy模式时使用。

第一次获取要加锁创建实例

创建好后无需加锁访问。


哎。。。单例中lazy模式也不需要double-checked locking吧。用内部类类似于Guice的创建方式多好
0 请登录后投票
   发表时间:2012-03-11  
jilen 写道
feikiss 写道
我的个人观点吧,在Java中加锁sychronized并不能保证一定是线程安全的,所以设计模式中出现了double-checked locking模式。

double checked locking并不是为了线程安全诞生的,而是为了性能优化,防止每次都会进入同步块增加竞争
synchronized块内的代码都不会被reorder,不论是编译器还是cpu。volatile只保证变量的读写不被reorder(读写屏障)。


这才是正解
0 请登录后投票
   发表时间:2012-03-11  
要保证线程安全,至少有几种方法

有利用空间换时间的ThreadLocal
也有阻塞的同步,同类型的还有锁(JDK1.5以后)。
个人感觉绝大部分90%以上情况都可以用锁代替同步。
0 请登录后投票
   发表时间:2012-03-12  
freish 写道
spyker 写道
freish 写道
lyb520320 写道
feikiss 写道
我的个人观点吧,在Java中加锁sychronized并不能保证一定是线程安全的,所以设计模式中出现了double-checked locking模式。

在Java中加锁sychronized并不能保证一定是线程安全的
那JAVA加这个东西有什么用?好好理解JAVA的锁机制和volatile关键字的含义。




确实,用了锁并不一定就表示是线程安全的了

譬如一个变量,写的时候用锁了,读的时候没有用锁,依然不是线程安全的[color=red][/color]

只有充分同步,才能保证线程安全,至于如何做到充分同步,这就是考验程序员对java并发掌握程度的时候了





你这样的是有问题的同步写法

of course,但它却是是同步



哈哈 错误的同步 不是同步
0 请登录后投票
   发表时间:2012-03-12  
spyker 写道
freish 写道
spyker 写道
freish 写道
lyb520320 写道
feikiss 写道
我的个人观点吧,在Java中加锁sychronized并不能保证一定是线程安全的,所以设计模式中出现了double-checked locking模式。

在Java中加锁sychronized并不能保证一定是线程安全的
那JAVA加这个东西有什么用?好好理解JAVA的锁机制和volatile关键字的含义。




确实,用了锁并不一定就表示是线程安全的了

譬如一个变量,写的时候用锁了,读的时候没有用锁,依然不是线程安全的[color=red][/color]

只有充分同步,才能保证线程安全,至于如何做到充分同步,这就是考验程序员对java并发掌握程度的时候了





你这样的是有问题的同步写法

of course,但它却是是同步



哈哈 错误的同步 不是同步

请大家贴代码。。。
0 请登录后投票
   发表时间:2012-04-22  
写同步了,读不需要同步?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics