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

Variable Handle ใน Java 9 คืออะไร

Variable Handle คือตัวแปรหรือ reference to a set of variables รวมถึงคอมโพเนนต์อื่นๆ ของ static field non-static fields และ outer array elements ในโครงสร้างข้อมูล heap หมายถึง Variable Handle คล้ายกับ Method Handle ที่มีอยู่แล้ว แทนด้วยคลาส java.lang.invoke.VarHandle สร้าง Variable Handle objects ด้วย static factory method ของ java.lang.invoke.MethodHandles.Lookup ใช้เข้าถึง element เดียวใน array และ byte[] array ได้

ไวยากรณ์

public abstract class VarHandle extends Object

ตัวอย่างการใช้งาน

import java.lang.invoke.MethodHandles;
import java.lang.invoke.VarHandle;
import java.util.Arrays;

public class VarHandleTest {
    public static void main(String args[]) {
        VarHandle varHandle = MethodHandles.arrayElementVarHandle(int[].class);
        int[] array = new int[5];
        printArray(array);
        varHandle.set(array, 2, 5);
        printArray(array);
        System.out.println(varHandle.get(array, 2));
    }
    
    private static void printArray(int[] array) {
        System.out.println(Arrays.toString(array));
    }
}

ผลลัพธ์

[0, 0, 0, 0, 0]
[0, 0, 5, 0, 0]
5

เมธอดสำคัญของ VarHandle

  • get(Object... args) - อ่านค่า
  • set(Object... args, Object value) - เขียนค่า
  • getAndSet(Object... args, Object value) - อ่านแล้วเขียนใหม่ (atomic)
  • compareAndSet(Object... args, Object expected, Object newValue) - CAS operation
  • getAndAdd(Object... args, Object value) - atomic add
  • getVolatile(Object... args) - volatile read
  • setVolatile(Object... args, Object value) - volatile write

การสร้าง VarHandle

// สำหรับ array
VarHandle arrayHandle = MethodHandles.arrayElementVarHandle(int[].class);

// สำหรับ static field
VarHandle staticHandle = MethodHandles.lookup()
    .findStaticVarHandle(MyClass.class, "fieldName", int.class);

// สำหรับ instance field
VarHandle instanceHandle = MethodHandles.lookup()
    .findVarHandle(MyClass.class, "fieldName", int.class);

VarHandle ให้ low-level memory access operations แบบ atomic และ ordered เหมาะสำหรับ concurrent programming ระดับสูง