java中volatile的作用
作者: 喻伯炫, 发布: 2021-10-02 16:21:02
1、 volatile是Java语言中的一个关键字,它用来告诉编译器这个变量可能会被外部线程修改,所以编译器不会对这个变量进行优化。 但是,这并不意味着volatile可以保证原子性。 首先,volatile可以保证变量的可见性。
5、 这里如果用volatile关键字对inited变量进行修饰,就不会出现这种问题了,因为当执行到语句2时,必定能保证context已经初始化完毕。 4.volatile的原理和实现机制 前面讲述了源于volatile关键字的一些使用,下面我们来探讨一下volatile到底如何保证可见性和禁止指令重排序的。
2、 Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。 而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。 这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
3、 volatile, 声明这个字段易变(可能被多个线程使用),Java内存模型负责各个线程的工作区与主存区的该字段的值保持同步,即一致性。 static, 声明这个字段是静态的(可能被多个实例共享),在主存区上该类的所有实例的该字段为同一个变量,即唯一性。 volatile, 声明变量值的一致性;static,声明变量的唯一性。
4、 所以,volatile的使用场景是有限的,在有限的一些情形下可以使用 volatile 变量替代锁。 要使 volatile 变量提供理想的线程安全,必须同时满足下面两个条件:1)对变量的写操作不依赖于当前值。