ENIGMA AI
ENIGMA AI
Java Сложный

Какие проблемы многопоточности существуют в Java?

Проблемы многопоточности в Java

1. Race Condition

Результат зависит от порядка выполнения потоков.

// ПРОБЛЕМА
class Counter {
    private int count = 0;

    public void increment() {
        count++;  // Не атомарно: read-modify-write
    }
}

// РЕШЕНИЕ
class Counter {
    private AtomicInteger count = new AtomicInteger(0);

    public void increment() {
        count.incrementAndGet();  // Атомарно
    }
}

2. Deadlock

Потоки блокируют друг друга навечно.

// ПРОБЛЕМА
Object lock1 = new Object();
Object lock2 = new Object();

// Thread 1
synchronized(lock1) {
    synchronized(lock2) { }  // Ждёт lock2
}

// Thread 2
synchronized(lock2) {
    synchronized(lock1) { }  // Ждёт lock1
}

// РЕШЕНИЕ: единый порядок захвата блокировок

3. Livelock

Потоки активны, но не продвигаются.

// Оба потока "уступают" друг другу бесконечно
while (resourceInUse) {
    Thread.sleep(random());  // Добавить случайную задержку
}

4. Starvation

Поток не получает ресурсы из-за приоритетов.

// Низкоприоритетный поток не получает CPU
thread.setPriority(Thread.MIN_PRIORITY);

// РЕШЕНИЕ: использовать fair locks
ReentrantLock lock = new ReentrantLock(true);  // fair=true

5. Visibility Problem

Изменения не видны другим потокам.

// ПРОБЛЕМА
class Flag {
    private boolean running = true;  // Может быть закэширован

    public void stop() { running = false; }

    public void run() {
        while (running) { }  // Может не увидеть изменение
    }
}

// РЕШЕНИЕ
private volatile boolean running = true;

6. False Sharing

Разные переменные в одной cache line.

// ПРОБЛЕМА
class Data {
    volatile long a;  // Могут быть в одной cache line
    volatile long b;
}

// РЕШЕНИЕ (Java 8+)
class Data {
    @Contended
    volatile long a;
    @Contended
    volatile long b;
}

Инструменты решения:

Проблема Решение
Race Condition synchronized, Atomic*, Lock
Deadlock Единый порядок блокировок
Visibility volatile, synchronized
Starvation Fair locks

Concurrent Collections:

ConcurrentHashMap<K, V>  // Thread-safe Map
CopyOnWriteArrayList<E>  // Thread-safe List
BlockingQueue<E>         // Очередь с блокировкой

Похожие вопросы

Готовитесь к собеседованию?

ENIGMA AI — невидимый ИИ-помощник для технических интервью

Попробовать бесплатно
Все вопросы