介绍
volatile 是 Java 中的关键字,用于修饰变量。它的作用是强制对被修饰的变量的写操作立即刷新到主存中,并强制对该变量的读操作从主存中读取最新的值,而不是使用缓存中的值。
作用
保证变量的可见性:
可见性指的是多个线程之间对共享变量的修改能否被及时地通知到其他线程,也就是说,当一个线程修改了共享变量的值时,其他线程能够立即看到这个变化。如果共享变量的可见性不能得到保证,就可能出现数据不一致的情况。
当一个变量被 volatile 修饰时,任何对该变量的写操作都会立即刷新到主存中,而任何对该变量的读操作都会从主存中读取最新的值。这样可以保证多个线程之间对该变量的读写操作都是可见的。文章来源:https://www.toymoban.com/news/detail-406377.html
禁止指令重排:
指令重排指的是编译器或处理器为了提高程序运行效率而对指令序列进行重新排序的过程。在多线程环境下,指令重排可能会导致程序的执行结果与预期结果不一致。因此,为了保证程序的正确性,需要使用 volatile 关键字或 synchronized 关键字来禁止指令重排。具体来说,当一个变量被volatile修饰时,编译器和处理器会插入一些内存屏障,保证指令的执行顺序不会被打乱。文章来源地址https://www.toymoban.com/news/detail-406377.html
内存屏障是一种特殊的CPU指令,它可以保证在执行到内存屏障之前的所有指令都已经执行完成,并且其结果已经被写入内存中。在执行内存屏障之后的指令,必须等待前面的指令执行完成后,才能开始执行。这样可以避免由于 CPU 的乱序执行导致的指令重排和内存操作的乱序问题。
synchronized 和 volatile 在实现上都使用了内存屏障来保证线程安全性。synchronized 使用了一种特殊的内存屏障——“内存锁定”
到了这里,关于【voliate 关键字】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!