课程
/后端开发
/Java
/细说Java多线程之内存可见性
volatile既然不能保证原子性,那么volatile是不是没有什么用了?没有什么应用场景了?
2016-07-28
源自:细说Java多线程之内存可见性 4-4
正在回答
这么跟你解释:一行java代码被cpu执行的时候执行的是若干条cpu指令,synchronized对应到cpu执行若干条指令,但是volatile也对应若干条指令,相同的是他们对应的指令有一些相同的,即有重叠,但是又有差异,于是功能有相同也有差异。他们的使用场景也是如此。你现在不适合去理解深沉原理,先学会用,用对场景。
这个就要涉及到volatile和synchronized两者的比较了。在实际使用中,synchronized比volatile使用更加广泛,但是由于volatile比synchronized更加轻量级,不需要加锁,因此不会阻塞线程。所以在能保证共享变量的原子性的情况下使用volatile的效率会更高。
举报
用两种方式实现内存可见性,代领大家深层次学习Java中的内存
2 回答volatile原子性问题
1 回答volatile不能保证原子性,解决方法
9 回答不是说volatile不保证原子性吗?为什么对于64位类型的变量用volatile修饰?
1 回答原子性是什么意思?
2 回答关于long和double非原子性的解决办法