Sobes.tech
Назад к вопросам
Senior
6

Задача по коду: AtomicBoolean и race condition (скриншот с кодом)

Компании, где спрашивали
Позитив Технолоджис

Ответ от нейросети

sobes.tech AI

В Java класс AtomicBoolean обеспечивает атомарные операции с булевым значением, что помогает избежать race condition при доступе из нескольких потоков.

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

Использование AtomicBoolean позволяет выполнять операции типа compareAndSet, getAndSet и другие атомарно, без необходимости явно использовать synchronized или блокировки.

Пример:

import java.util.concurrent.atomic.AtomicBoolean;

public class Example {
    private AtomicBoolean flag = new AtomicBoolean(false);

    public void doOnce() {
        if (flag.compareAndSet(false, true)) {
            // Этот блок выполнится только один раз
            System.out.println("Выполняем действие один раз");
        }
    }
}

Здесь compareAndSet гарантирует, что только один поток сможет изменить значение с false на true и выполнить код внутри if, предотвращая race condition при попытке выполнить действие несколько раз.