Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

จะสร้าง VarHandle แบบคงที่ใน Java 9 ได้อย่างไร


วาร์แฮนเดิล เป็นการอ้างอิงถึงตัวแปร และให้การเข้าถึงตัวแปรภายใต้โหมดการเข้าถึงต่างๆ (เช่น ธรรมดา อ่าน/เขียน , ผันผวน อ่าน/เขียน และ เปรียบเทียบและสลับ ) คล้ายกับฟังก์ชันของ 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