РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1042 of 1163 menu

Метод incrementAndGet

Метод incrementAndGet класса AtomicInteger атомарно увеличивает текущее значение переменной на единицу и возвращает уже новое, увеличенное значение. Метод не принимает параметров. Операция выполняется как единое неделимое действие, поэтому её безопасно использовать из нескольких потоков одновременно без внешней синхронизации.

Метод возвращает значение типа int - то, которое получилось после увеличения.

Синтаксис

atomicInteger.incrementAndGet()

Пример

Давайте создадим счётчик и увеличим его значение на единицу, выведя результат:

import java.util.concurrent.atomic.AtomicInteger; public class Main { public static void main(String[] args) { AtomicInteger counter = new AtomicInteger(0); int res = counter.incrementAndGet(); System.out.println(res); } }

Результат выполнения кода:

1

Пример

Давайте увеличим значение три раза подряд и посмотрим, что вернёт каждый вызов:

import java.util.concurrent.atomic.AtomicInteger; public class Main { public static void main(String[] args) { AtomicInteger counter = new AtomicInteger(0); System.out.println(counter.incrementAndGet()); System.out.println(counter.incrementAndGet()); System.out.println(counter.incrementAndGet()); } }

Результат выполнения кода:

1 2 3

Пример

Давайте посмотрим, как incrementAndGet работает при одновременном доступе из нескольких потоков. Запустим два потока, каждый из которых увеличит счётчик по тысяче раз:

import java.util.concurrent.atomic.AtomicInteger; public class Main { public static void main(String[] args) throws InterruptedException { AtomicInteger counter = new AtomicInteger(0); Runnable task = () -> { for (int i = 0; i < 1000; i++) { counter.incrementAndGet(); } }; Thread t1 = new Thread(task); Thread t2 = new Thread(task); t1.start(); t2.start(); t1.join(); t2.join(); System.out.println(counter.get()); } }

Результат выполнения кода:

2000

Благодаря атомарности метода значение всегда будет равно 2000 - операции двух потоков не перезаписывают друг друга.

Смотрите также

  • класс AtomicInteger,
    который хранит атомарное целое число
  • метод get,
    который возвращает текущее значение
  • метод set,
    который устанавливает новое значение
  • метод compareAndSet,
    который меняет значение при совпадении
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить