Назад к вопросам
Middle
66
questionbank

Каковы другие способы борьбы с гонкой потоков, кроме использования ключевого слова volatile?

Sobes Copilot

Получайте ответы в реальном времени

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

sobes.tech AI

Мьютексы (synchronized блоки или функции, Lock API), атомарные переменные (AtomicInteger, AtomicBoolean и т.д.), семафоры, мониторы, каналы (для передачи данных между потоками), и использование структур данных, безопасных для параллельного доступа (например, ConcurrentHashMap, CopyOnWriteArrayList).

// Пример с synchronized блоком
private final Object lock = new Object();
private int count = 0;

public void increment() {
    synchronized (lock) {
        count++;
    }
}
// Пример с AtominInteger
private final java.util.concurrent.atomic.AtomicInteger atomicCount = new java.util.concurrent.atomic.AtomicInteger(0);

public void incrementAtomic() {
    atomicCount.incrementAndGet();
}