论坛首页 Java企业应用论坛

讨论:同步VS线程安全

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

在Java中加锁sychronized并不能保证一定是线程安全的
那JAVA加这个东西有什么用?好好理解JAVA的锁机制和volatile关键字的含义。
0 请登录后投票
   发表时间:2012-03-09  
feikiss 写道
RT...
大家讨论一下,同步是否一定保证线程安全?
线程安全的是否一定需要同步?
这两个之间的充分必要性,show下你的观点吧~~~


个人觉得没必要陷入到这样的理论中去。能用代码解决并发即可吧。
0 请登录后投票
   发表时间:2012-03-09  
同步只是实现线程安全的一种手段
现在有很多非阻塞算法可以替代同步
可以看看我的博客
1 请登录后投票
   发表时间:2012-03-09  
picasso.di 写道
我认为线程安全不一定需要同步,举几个例子
(1)一个无状态(stateless)的类一定是线程安全的,不需要额外的同步;
(2)一个不可变(immutable)的类一定是线程安全的,不需要额外的同步。
(3)使用CAS原语亦能实现线程安全而不不需要使用sychronized。

以上是我个人理解,进攻参考。

CAS 在大并发下, 不能完全保证线程安全吧
0 请登录后投票
   发表时间:2012-03-09  
tenderuser 写道
picasso.di 写道
我认为线程安全不一定需要同步,举几个例子
(1)一个无状态(stateless)的类一定是线程安全的,不需要额外的同步;
(2)一个不可变(immutable)的类一定是线程安全的,不需要额外的同步。
(3)使用CAS原语亦能实现线程安全而不不需要使用sychronized。

以上是我个人理解,进攻参考。

CAS 在大并发下, 不能完全保证线程安全吧

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

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

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

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

这本身就是一个抛砖引玉的题目,那就说一下你的理解吧~~
0 请登录后投票
   发表时间:2012-03-10   最后修改:2012-03-10
feikiss 写道
我的个人观点吧,在Java中加锁sychronized并不能保证一定是线程安全的,所以设计模式中出现了double-checked locking模式。

double checked locking并不是为了线程安全诞生的,而是为了性能优化,防止每次都会进入同步块增加竞争
synchronized块内的代码都不会被reorder,不论是编译器还是cpu。volatile只保证变量的读写不被reorder(读写屏障)。
0 请登录后投票
   发表时间:2012-03-10  
jinnianshilongnian 写道
feikiss 写道
我的个人观点吧,在Java中加锁sychronized并不能保证一定是线程安全的,所以设计模式中出现了double-checked locking模式。


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

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

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

创建好后无需加锁访问。


+1http://www.cnblogs.com/flier/archive/2004/07/08/22353.html
0 请登录后投票
   发表时间:2012-03-10  
lyb520320 写道
feikiss 写道
我的个人观点吧,在Java中加锁sychronized并不能保证一定是线程安全的,所以设计模式中出现了double-checked locking模式。

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




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

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

只有充分同步,才能保证线程安全,至于如何做到充分同步,这就是考验程序员对java并发掌握程度的时候了
0 请登录后投票
论坛首页 Java企业应用版

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