问个线程安全的问题

2020-02-19 21:46:45 +08:00
 zxc1234

线程安全三大特性 1.原子性 2.可见性 3.有序性

synchronized 可以实现 原子性,可见性,有序性 volatile 可以实现 可见性,有序性

是这样子的吗

1970 次点击
所在节点    程序员
8 条回复
zxc1234
2020-02-19 22:01:53 +08:00
synchronized 锁住的代码内 单线程内 也会发生指令重排吧?
Ericcccccccc
2020-02-19 22:47:21 +08:00
@zxc1234 happen-before 主要还是内存屏障搞的
sawyera
2020-02-19 23:10:34 +08:00
是这样的
phantomzz
2020-02-19 23:41:54 +08:00
@zxc1234 synchronized 无法避免重排序,但是通过内存屏障可以保证有序性。
phantomzz
2020-02-19 23:43:23 +08:00
内存模型可以看 JSR-133
mightofcode
2020-02-19 23:44:36 +08:00
关于这个我有点疑问,Synchronized 能保证原子性吗?

Synchronized 里面的代码是可以调用 wait 的,进入 wait 之后,就可以被其他线程获取锁了,还符合原子性的定义么
phantomzz
2020-02-19 23:53:21 +08:00
@mightofcode wait()是属于显式释放锁,不影响 synchronized 的语义吧
mightofcode
2020-02-19 23:56:35 +08:00
@phantomzz 但是 Synchronized 里面套的东西就分成两部分了,不原子了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/645948

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX