我们能否在 Java 中使用 volatile 关键词使数组易失?
volatile 修改器指示 JVM 访问 volatile 变量的线程应始终从内存获取数据。也就是说,线程不应缓存 volatile 变量。
访问 volatile 变量会将主内存中所有变量的缓存副本同步。volatile 仅可应用于类型为对象或私有变量的实例变量。volatile 对象引用可以为 null。
示例
public class MyRunnable implements Runnable { private volatile boolean active; public void run() { active = true; while (active) { // line 1 // some code here } } public void stop() { active = false; // line 2 } }
使数组变为 volatile
但即使我们声明数组 volatile,数组中的元素也不具有 volatile 行为。
为了解决此问题,Java 提供了两个类,即 AtomicIntegerArray 和 AtomicLongArray,它们表示数组(在(各自)变量上有原子包装器),自动更新这些数组的元素。
也就是说,可以访问由这些类表示的这些数组的各个元素,因为它们是 volatile 变量。这些类提供 get() 和 set() 变量,分别用于检索或指定每个元素的值。
由于可为整数和长整型提供原子包装器,因此对于其余数据类型,每次为其指定一个元素时,都需要重新指定数组的引用值。
volatile int[] myArray = new int[3]; myArray [0] = 100; myArray = myArray; myArray [1] = 50; myArray = myArray; myArray [2] = 150; myArray = myArray;
广告