Назад к вопросам
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 при попытке выполнить действие несколько раз.