锁定老帖子 主题:讨论:同步VS线程安全
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2012-03-10
freish 写道 lyb520320 写道 feikiss 写道 我的个人观点吧,在Java中加锁sychronized并不能保证一定是线程安全的,所以设计模式中出现了double-checked locking模式。
在Java中加锁sychronized并不能保证一定是线程安全的 那JAVA加这个东西有什么用?好好理解JAVA的锁机制和volatile关键字的含义。 确实,用了锁并不一定就表示是线程安全的了 譬如一个变量,写的时候用锁了,读的时候没有用锁,依然不是线程安全的[color=red][/color] 只有充分同步,才能保证线程安全,至于如何做到充分同步,这就是考验程序员对java并发掌握程度的时候了 你这样的是有问题的同步写法 |
|
返回顶楼 | |
发表时间:2012-03-10
spyker 写道 freish 写道 lyb520320 写道 feikiss 写道 我的个人观点吧,在Java中加锁sychronized并不能保证一定是线程安全的,所以设计模式中出现了double-checked locking模式。
在Java中加锁sychronized并不能保证一定是线程安全的 那JAVA加这个东西有什么用?好好理解JAVA的锁机制和volatile关键字的含义。 确实,用了锁并不一定就表示是线程安全的了 譬如一个变量,写的时候用锁了,读的时候没有用锁,依然不是线程安全的[color=red][/color] 只有充分同步,才能保证线程安全,至于如何做到充分同步,这就是考验程序员对java并发掌握程度的时候了 你这样的是有问题的同步写法 of course,但它却是是同步 |
|
返回顶楼 | |
发表时间:2012-03-11
feikiss 写道 我的个人观点吧,在Java中加锁sychronized并不能保证一定是线程安全的,所以设计模式中出现了double-checked locking模式。
双重锁定在java中无效。。 |
|
返回顶楼 | |
发表时间:2012-03-11
jinnianshilongnian 写道 feikiss 写道 我的个人观点吧,在Java中加锁sychronized并不能保证一定是线程安全的,所以设计模式中出现了double-checked locking模式。
double check 是为了 避免无用同步的,将锁最小化 一般在单例中lazy模式时使用。 第一次获取要加锁创建实例 创建好后无需加锁访问。 哎。。。单例中lazy模式也不需要double-checked locking吧。用内部类类似于Guice的创建方式多好 |
|
返回顶楼 | |
发表时间:2012-03-11
jilen 写道 feikiss 写道 我的个人观点吧,在Java中加锁sychronized并不能保证一定是线程安全的,所以设计模式中出现了double-checked locking模式。
double checked locking并不是为了线程安全诞生的,而是为了性能优化,防止每次都会进入同步块增加竞争 synchronized块内的代码都不会被reorder,不论是编译器还是cpu。volatile只保证变量的读写不被reorder(读写屏障)。 这才是正解 |
|
返回顶楼 | |
发表时间:2012-03-11
要保证线程安全,至少有几种方法
有利用空间换时间的ThreadLocal 也有阻塞的同步,同类型的还有锁(JDK1.5以后)。 个人感觉绝大部分90%以上情况都可以用锁代替同步。 |
|
返回顶楼 | |
发表时间:2012-03-12
freish 写道 spyker 写道 freish 写道 lyb520320 写道 feikiss 写道 我的个人观点吧,在Java中加锁sychronized并不能保证一定是线程安全的,所以设计模式中出现了double-checked locking模式。
在Java中加锁sychronized并不能保证一定是线程安全的 那JAVA加这个东西有什么用?好好理解JAVA的锁机制和volatile关键字的含义。 确实,用了锁并不一定就表示是线程安全的了 譬如一个变量,写的时候用锁了,读的时候没有用锁,依然不是线程安全的[color=red][/color] 只有充分同步,才能保证线程安全,至于如何做到充分同步,这就是考验程序员对java并发掌握程度的时候了 你这样的是有问题的同步写法 of course,但它却是是同步 哈哈 错误的同步 不是同步 |
|
返回顶楼 | |
发表时间: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,但它却是是同步 哈哈 错误的同步 不是同步 请大家贴代码。。。 |
|
返回顶楼 | |
发表时间:2012-04-22
写同步了,读不需要同步?
|
|
返回顶楼 | |