如何在 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 次浏览

职业生涯起步

完成课程以获得认证

开始学习
广告
© . All rights reserved.