Какие способы синхронизации потоков в Java ты знаешь?
Ответ от нейросети
sobes.tech AI
В Java существует несколько способов синхронизации потоков:
-
Ключевое слово synchronized — блокировка методов или блоков кода для обеспечения взаимного исключения.
-
Объекты Lock из java.util.concurrent.locks — более гибкий механизм блокировок, например, ReentrantLock, позволяющий пытаться захватить блокировку с таймаутом, проверять состояние и т.д.
-
Volatile — гарантирует видимость изменений переменной между потоками, но не обеспечивает атомарность.
-
Atomic-классы (AtomicInteger, AtomicReference и др.) — обеспечивают атомарные операции без блокировок.
-
Семафоры (Semaphore) — ограничивают количество потоков, одновременно выполняющих определённый участок кода.
-
CountDownLatch, CyclicBarrier — для координации потоков, ожидания событий.
-
Concurrent коллекции (ConcurrentHashMap, ConcurrentLinkedQueue и др.) — обеспечивают потокобезопасный доступ без внешней синхронизации.
Пример использования synchronized:
public class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
Выбор способа зависит от задачи: для простого взаимного исключения подходит synchronized, для более сложных сценариев — Lock или атомарные классы.