Встречается на 2% собеседований по Java

Как бороться с состоянием гонки (Race condition) в многопоточности

В Java есть несколько способов предотвращения race condition:

  1. Синхронизация - использование synchronized блоков или методов:
java
public synchronized void increment() {
    counter++;
}
  1. Атомарные операции - классы из java.util.concurrent.atomic:
java
AtomicInteger counter = new AtomicInteger(0);
counter.incrementAndGet();
  1. Иммутабельность - создание неизменяемых объектов:
java
public final class ImmutableValue {
    private final int value;
    // constructor and getter
}
  1. Thread-local переменные - хранение состояния в пределах потока:
java
ThreadLocal<Integer> threadLocal = ThreadLocal.withInitial(() -> 0);
  1. Использование потокобезопасных коллекций из java.util.concurrent:
java
ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>();

Выбор метода зависит от конкретной ситуации. Атомарные операции обычно быстрее синхронизации, а иммутабельность полностью исключает проблему. Для сложных сценариев лучше использовать высокоуровневые конструкции из java.util.concurrent.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы