Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java 9에서 정적 VarHandle을 만드는 방법은 무엇입니까?

<시간/>

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