如何在 Java 9 中建立靜態 VarHandle?


VarHandle 是對變數的一個引用,它提供了以各種訪問模式(如普通 讀/寫volatile 讀/寫比較並交換)訪問變數的功能,類似於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

更新時間:17-4-2020

429 次瀏覽

職業生涯起步

完成課程以獲得認證

開始學習
廣告