19 Nisan 2023 Çarşamba

VarHandle Sınıfı

Giriş
Şu satırı dahil ederiz
import  java.lang.invoke.VarHandle;
AtomicLongFieldUpdater gibi AtomicFieldUpdator sınıfların yerine kullanılır

Açıklaması şöyle
As a convention, we should declare VarHandles as static final fields and explicitly initialize them in static blocks. Also, we usually use the uppercase version of the corresponding field name as their name. 

Elde Etme

Örnek - Public Variable
Elimizde şöyle bir kod olsun
public class VariableHandlesUnitTest {
  public int publicTestVariable = 1;
  private int privateTestVariable = 1;
  public int variableToSet = 1;
  public int variableToCompareAndSet = 1;
  public int variableToGetAndAdd = 0;
  public byte variableToBitwiseOr = 0;

Şöyle yaparız
VarHandle PUBLIC_TEST_VARIABLE = MethodHandles
  .lookup()
  .in(VariableHandlesUnitTest.class) // Class name
  .findVarHandle(VariableHandlesUnitTest.class, // Class name
                 "publicTestVariable", // Variable name
                  int.class // Variable type
  );
compareAndSet metodu
Örnek
Şöyle yaparız
VARIABLE_TO_COMPARE_AND_SET.compareAndSet(this, 1, 100);
assertEquals(100, (int) VARIABLE_TO_COMPARE_AND_SET.get(this));
coordinateTypes metodu
Şöyle yapasız
assertEquals(1, PUBLIC_TEST_VARIABLE.coordinateTypes().size());
assertEquals(VariableHandlesUnitTest.class,PUBLIC_TEST_VARIABLE.coordinateTypes().get(0));
get metodu
Okuma içindir
Örnek
Şöyle yaparız
assertEquals(1, (int) PUBLIC_TEST_VARIABLE.get(this));
getAndAdd metodu
Örnek
Şöyle yaparız
int before = (int) VARIABLE_TO_GET_AND_ADD.getAndAdd(this, 200);

assertEquals(0, before);
assertEquals(200, (int) VARIABLE_TO_GET_AND_ADD.get(this));
getAndBitwiseOr metodu
Örnek
Şöyle yaparız
byte before = (byte) VARIABLE_TO_BITWISE_OR.getAndBitwiseOr(this, (byte) 127);

assertEquals(0, before);
assertEquals(127, (byte) VARIABLE_TO_BITWISE_OR.get(this));
set metodu
Yazma içindir
Örnek
Şöyle yaparız
VARIABLE_TO_SET.set(this, 15);
assertEquals(15, (int) VARIABLE_TO_SET.get(this));


Hiç yorum yok:

Yorum Gönder