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
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
Hiç yorum yok:
Yorum Gönder