volatile 作用:1:保证可见性;2:防止指令重排 ;3:一定的原子性
1:共享元素的改变,直接写回主存中,同时通知其余线程刷新缓存,读取最新的值,防止脏读;
2:对于没有依赖的指令,jvm会进行指令重排,有可能使程序失效;
3.原子性(保证一定的原子性),可以保证对于double 的操作,是原子性的,不会在程序对其进行操作的时候,被打断,造成脏读;至于保证一定的原子性
而言,主要是针对long,和double而言,因为这两个是64位,正常来说是进行两次的读取,volaile可以保证原子性,但是对于 i++的话 这时候i++也是不保证原子性的,不管是不是volatile,因为有两步操作。
要保证完整性一般用线程同步。
1:共享元素的改变,直接写回主存中,同时通知其余线程刷新缓存,读取最新的值,防止脏读;
2:对于没有依赖的指令,jvm会进行指令重排,有可能使程序失效;
3.原子性(保证一定的原子性),可以保证对于double 的操作,是原子性的,不会在程序对其进行操作的时候,被打断,造成脏读;至于保证一定的原子性
而言,主要是针对long,和double而言,因为这两个是64位,正常来说是进行两次的读取,volaile可以保证原子性,但是对于 i++的话 这时候i++也是不保证原子性的,不管是不是volatile,因为有两步操作。
要保证完整性一般用线程同步。
本文详细解析了Java中Volatile关键字的作用,包括确保变量修改的可见性、禁止指令重排序以及提供一定条件下的原子性保障。特别关注其在多线程环境下如何避免脏读等问题。
1500

被折叠的 条评论
为什么被折叠?



