Sobes.tech
Назад к вопросам
Junior — Middle
70

Какие средства синхронизации и управления потоками ты применяешь в своих проектах?

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

sobes.tech AI

В Java для синхронизации и управления потоками я обычно использую следующие средства:

  • synchronized — базовый механизм для блокировки критических секций кода.

  • ReentrantLock из java.util.concurrent.locks — более гибкая альтернатива synchronized с возможностью прерывания ожидания и попытки захвата блокировки.

  • volatile — для обеспечения видимости изменений переменных между потоками без полной блокировки.

  • CountDownLatch, CyclicBarrier, Semaphore — для координации работы нескольких потоков.

  • Concurrent Collections (например, ConcurrentHashMap, CopyOnWriteArrayList) — потокобезопасные коллекции для работы без явных блокировок.

  • ExecutorService — для управления пулом потоков и упрощения запуска задач.

Пример использования ReentrantLock:

import java.util.concurrent.locks.ReentrantLock;

public class Counter {
    private int count = 0;
    private final ReentrantLock lock = new ReentrantLock();

    public void increment() {
        lock.lock();
        try {
            count++;
        } finally {
            lock.unlock();
        }
    }

    public int getCount() {
        return count;
    }
}

Такой подход позволяет безопасно изменять общие данные в многопоточной среде, избегая гонок и обеспечивая корректность работы.