Главная

Java

Многопоточность


Atomic :

Package java.util.concurrent.atomic.* ;
Операция называется атомарной тогда, когда её можно безопасно выполнять при параллельных вычислениях в нескольких потоках, не используя при этом ни блокировок, ни synchronized .
Внутри атомарные классы очень активно используют сравнение с обменом (compare-and-swap, CAS), атомарную инструкцию, которую поддерживает большинство современных процессоров


AtomicInteger :

внутри private volatile int value;

LongAdder :

может выступать в качестве альтернативы AtomicLong для последовательного сложения чисел.
класс используется в ситуациях, когда добавлять числа приходится гораздо чаще, чем запрашивать результат.

LongAccumulator :

Класс LongAccumulator несколько расширяет возможности LongAdder
Вместо простого сложения он обрабатывает входящие значения с помощью лямбды типа LongBinaryOperator, которая передаётся при инициализации. .



пример :


public class BadAtomic {

      private static int value;
//    private static AtomicInteger value = new AtomicInteger(0) ;

    public static void main(String[] args) {

        for (int i = 0; i < 10_000; i++) {
            new MyThread().start();
        }
        try {
            Thread.sleep(2_048);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(value);

    }

    private static class MyThread extends Thread {
        @Override
        public void run() {
            value++;
//          value.incrementAndGet();
        }
    }
}


Полезные ссылки: