Что такое блокировка (Lock) и мьютекс (Mutex)?

«Что такое блокировка (Lock) и мьютекс (Mutex)?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Lock (блокировка) — это общий механизм синхронизации для контроля доступа к общему ресурсу в многопоточной среде. Mutex (Mutual Exclusion, взаимное исключение) — это конкретный тип блокировки, гарантирующий, что только один поток может владеть ею в данный момент.

Взаимосвязь: Mutex — это простейшая, часто нереентерабельная реализация Lock.

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

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

Lock lock = new ReentrantLock();

void accessSharedResource() {
    lock.lock(); // Захват блокировки (поток будет ждать, если она занята)
    try {
        // Критическая секция: работа с общим ресурсом
    } finally {
        lock.unlock(); // Освобождение блокировки ВСЕГДА в finally-блоке
    }
}
Сравнение с synchronized: Особенность synchronized ReentrantLock
Синтаксис Встроен в язык (ключевое слово) Явный API-вызов (lock(), unlock())
Гибкость Базовая Расширенная (таймауты, прерываемость, честность)
Рентерабельность Да (реентерабельный) Да (по умолчанию)

Правило: Используйте synchronized для простых случаев, а Lock — когда нужны его продвинутые возможности.