Sobes.tech
Back to questions
Junior — Middle
55

Объясните, что такое ReentrantLock и как он отличается от стандартных механизмов синхронизации в Java.

Companies where asked
ВТБВТБ

Answer from AI

sobes.tech AI

ReentrantLock — это класс из пакета java.util.concurrent.locks, который реализует механизм блокировки с возможностью повторного захвата (reentrant). Это значит, что поток, который уже захватил блокировку, может сделать это снова без блокировки самого себя.

Отличия от стандартного synchronized:

  • Гибкость: ReentrantLock позволяет явно захватывать и освобождать блокировку с помощью методов lock() и unlock(), тогда как synchronized работает через блоки или методы.
  • Возможность прерывания: можно попытаться захватить блокировку с возможностью прерывания (lockInterruptibly()), чего нет у synchronized.
  • Попытка захвата без ожидания: tryLock() позволяет попытаться захватить блокировку и сразу получить результат, не блокируясь.
  • Поддержка условий: ReentrantLock поддерживает объекты Condition для более тонкой работы с ожиданием и уведомлением.

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

import java.util.concurrent.locks.ReentrantLock;

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

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

    public int getCount() {
        return count;
    }
}