我一直在阅读Java中的VarHandle,从文档中将访问模式分为以下几类:
读取访问模式,例如使用易失性内存读取变量 订购效果;
写入访问模式,例如使用释放内存更新变量 订购效果;
原子更新访问模式,例如变量的比较和设置 具有易失性存储器顺序效果,用于读写;
数字原子更新访问模式,例如使用plain进行get-and-add 用于写入和获取内存顺序效果的内存顺序效果 读数。
按位原子更新访问模式,例如get-and-bitwise-with和 释放内存顺序效果,用于写入和普通内存顺序 阅读效果。
从Using JDK 9 Memory Order Modes
中找到以下代码示例import java.lang.invoke.MethodHandles;
import java.lang.invoke.VarHandle;
class Point {
volatile int x, y;
private static final VarHandle X;
static {
try {
X = MethodHandles.lookup().
findVarHandle(Point.class, "x",
int.class);
} catch (ReflectiveOperationException e) {
throw new Error(e);
}
}
// ...
}
我想弄清楚它是如何实现这一点的,底层实现是什么以及如何使用所有这些访问模式?