VarHandle là tham chiếu đến biến, cung cấp truy cập biến dưới các access mode (như plain read/write, volatile read/write, compare-and-swap), tương tự chức năng của java.util.concurrent.atomic và sun.misc.Unsafe. Biến có thể là array element, instance hoặc static field trong class.
Ví dụ dưới tạo static variable handle.
Ví dụ
import java.lang.invoke.MethodHandles;
import java.lang.invoke.VarHandle;
public class StaticVarHandleTest {
static int field;
static int[] array = new int[20];
static final VarHandle FIELD, ARRAY;
static {
try {
FIELD = MethodHandles.lookup().in(StaticVarHandleTest.class).findStaticVarHandle(StaticVarHandleTest.class, "field", Integer.TYPE);
ARRAY = MethodHandles.arrayElementVarHandle(int[].class);
} catch (Exception e) {
throw new InternalError(e);
}
}
public static void main(String args[]) throws Exception {
int i = (int) FIELD.getVolatile();
System.out.println(i);
FIELD.getAndAdd(5);
System.out.println(field);
System.out.println(ARRAY.getAndAdd(array, 5, 5));
System.out.println(ARRAY.getAndAdd(array, 5, 5));
}
}
Kết quả
0 5 0 5