Метод set
Метод set класса AtomicInteger атомарно
устанавливает новое значение переменной. В первый
параметр мы передаем новое целочисленное значение,
которое должно быть записано. Метод работает как
операция записи с семантикой volatile: изменение
сразу становится видимым другим потокам. При этом
метод не возвращает результата и не выполняет
проверок текущего значения.
Синтаксис
atomicInteger.set(newValue)
Пример
Давайте создадим счетчик и установим ему новое
значение 10:
import java.util.concurrent.atomic.AtomicInteger;
public class Main
{
public static void main(String[] args)
{
AtomicInteger counter = new AtomicInteger(5);
counter.set(10);
System.out.println(counter.get());
}
}
Результат выполнения кода:
10
Пример
Давайте покажем, что set заменяет значение
целиком, а не прибавляет его к текущему:
import java.util.concurrent.atomic.AtomicInteger;
public class Main
{
public static void main(String[] args)
{
AtomicInteger counter = new AtomicInteger(100);
counter.set(3);
System.out.println(counter.get());
}
}
Результат выполнения кода:
3
Пример
Давайте установим значение из одного потока и прочитаем его в другом:
import java.util.concurrent.atomic.AtomicInteger;
public class Main
{
public static void main(String[] args) throws InterruptedException
{
AtomicInteger counter = new AtomicInteger(0);
Thread writer = new Thread(() -> {
counter.set(42);
});
Thread reader = new Thread(() -> {
System.out.println(counter.get());
});
writer.start();
writer.join();
reader.start();
reader.join();
}
}
Результат выполнения кода:
42
Смотрите также
-
метод
get,
который возвращает текущее значение -
метод
incrementAndGet,
который увеличивает значение на единицу -
метод
compareAndSet,
который меняет значение при совпадении -
класс
AtomicInteger,
который представляет атомарный счетчик