VarHandle 변수에 대한 참조이며 다양한 액세스 모드(예:일반 읽기/쓰기 , 휘발성 읽기/쓰기 및 비교 및 교환 ), java.util.concurrent.atomic 에서 제공하는 기능과 유사 및 sun.misc.Unsafe . 변수는 배열 일 수 있습니다. 요소, 인스턴스 또는 정적 클래스의 필드입니다.
아래 예에서는 정적 변수 핸들을 생성할 수 있습니다.
예시
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)); } }
출력
0 5 0 5