内存屏障

来源:3-4 线程安全性-可见性

黎明的烬

2018-06-09

jimin老师。;我最近在看java并发艺术,根据作者的42页volatile重排序规则表描述;volatile写之前是普通读  已经考虑到volatile写之前,加过StoreStore屏障了, 要不要再加LoadStore屏障;


写回答

1回答

Jimin

2018-06-09

你好,volatile本身是只具备可见性,而不具备原子性的,那些内存屏障是在编译时遇到volatile加入的指令,我们是无法对其改变的。

jvm设计的这些关键字每个都有自己的特性,每个也有解决不了的问题,因此就设计上我感觉是没问题,我们自己要根据需要去选择的使用。比如volatile不具备原子性,导致课程里把count使用volatile修饰时,依旧无法保证线程安全性。这说明volatile并不适合这种场合,这种场合更适合使用synchronized,我们也没必要要求每个关键字都可以解决相同的问题,其实也没那个必要,我们根据关键字的特性去使用就可以了。

不知道我说的你是否明白,体会一下

1
3
Jimin
回复
黎明的烬
这句话本身差点一起,volatile是通过在cpu指令上加入内存屏障来保证可见性这个特性。至于其他的,他就不care了
2018-06-09
共3条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程