16 Ekim 2023 Pazartesi

AtomicBoolean Sınıfı

Giriş
Şu satırı dahil ederiz
import java.util.concurrent.atomic.AtomicBoolean;
Java'da Atomic kelimesi ile başlayan şu sınıflar var. AtomicBoolean, AtomicInteger,  AtomicLong. Bu sınıflar ortak bir arayüz veya ata sınıftan kalıtmıyorlar.

Açıklaması şöyle
Provides atomic operations for boolean variables. 
Interesting fact: the internal type of Atomic Boolean stored in the volotile int field. This is because int is the smallest type CAS operations can be implemented across different machine types.
compareAndSet metodu - boolean expect +  boolean update
Açıklaması şöyle
Atomically compares the current value of the AtomicBoolean with the expect value. If they match, it updates the value to update. The method returns true if the update was successful, indicating that the value was changed; otherwise, it returns false.
Örnek
Şöyle yaparız. Nesnenin mevcut değeri true ise false yapar ve if koşulu çalışır. Mevcut değeri false ise hiçbir şey yapmaz ve if koşulu çalışmaz.
if (atomicBoolean.compareAndSet(true, false)) {...}
Örnek
Şöyle yaparız
AtomicBoolean flag = new AtomicBoolean(true);

// Reading the value
boolean currentFlag = flag.get();
System.out.println("Current Flag: " + currentFlag);

// Updating the value
flag.set(false);
System.out.println("Updated Flag: " + flag.get());

// Compare and set
boolean success = flag.compareAndSet(false, true);
System.out.println("Compare and Set Success: " + success);
System.out.println("Updated Flag: " + flag.get());

// Get and Set (returns the previous value)
boolean previousValue = flag.getAndSet(false);
System.out.println("Previous Value: " + previousValue);
System.out.println("Updated Flag: " + flag.get());
get metodu
Açıklaması şöyle
Returns the current value of the AtomicBoolean as a boolean.
getAndSet - boolean newValue
Açıklaması şöyle
Sets the value of the AtomicBoolean to the specified newValue and returns the previous value.
set metodu
Açıklaması şöyle
Sets the value of the AtomicBoolean to the specified newValue.
Örnek
Şöyle yaparız
private AtomicBoolean keepRunning = new AtomicBoolean(true);

keepRunning.set(false);

while (keepRunning.get()) {...}
Eğer istersek get() metodunu çağırmadan if ile de kullanabiliriz.
if(!keepRunning) {...}

Hiç yorum yok:

Yorum Gönder