volatile既然不能保证原子性,那么volatile是不是没有什么用了?没有什么应用场景了?
这么跟你解释:一行java代码被cpu执行的时候执行的是若干条cpu指令,synchronized对应到cpu执行若干条指令,但是volatile也对应若干条指令,相同的是他们对应的指令有一些相同的,即有重叠,但是又有差异,于是功能有相同也有差异。他们的使用场景也是如此。你现在不适合去理解深沉原理,先学会用,用对场景。
这个就要涉及到volatile和synchronized两者的比较了。在实际使用中,synchronized比volatile使用更加广泛,但是由于volatile比synchronized更加轻量级,不需要加锁,因此不会阻塞线程。所以在能保证共享变量的原子性的情况下使用volatile的效率会更高。