Взаимное исключение (mutual exclusion) — это механизм или протокол, используемый для предотвращения одновременного доступа к общему ресурсу (например, переменной, файлу или блоку памяти) со стороны нескольких конкурирующих потоков или процессов. Это необходимо для обеспечения целостности данных и предотвращения состояния гонки (race condition), когда результат операции зависит от порядка выполнения неконтролируемых событий.
Основная идея взаимного исключения заключается в том, что в любой момент времени только один поток или процесс может получить доступ к критической секции — участку кода, который работает с общим ресурсом.
Типичные механизмы для реализации взаимного исключения в Java:
synchronized ключевое слово:
Class.java
Классы из пакета java.util.concurrent.locks:
synchronized.ReentrantLock, StampedLock, ReadWriteLock.java
Атомарные переменные (java.util.concurrent.atomic):
AtomicInteger, AtomicLong, AtomicReference.java
Выбор механизма зависит от конкретных требований: простоты (synchronized), гибкости (Locks) или производительности для простых операций (Atomic).
Неправильное использование механизмов взаимного исключения может привести к проблемам, таким как: