🔹 synchronized — встроенный монитор JVM. Прост, но ограничен:
— нельзя прервать ожидание
— нет tryLock
— нельзя узнать, занят ли монитор
🔹 ReentrantLock из java.util.concurrent.locks — явная блокировка с расширенными возможностями:
ReentrantLock lock = new ReentrantLock();
// Попытка без ожидания
if (lock.tryLock()) {
try {
// критическая секция
} finally {
lock.unlock(); // обязателен!
}
}
// С таймаутом
if (lock.tryLock(500, TimeUnit.MILLISECONDS)) { ... }
// С прерыванием
lock.lockInterruptibly();
🔹 Когда synchronized
Простые сценарии, нет нужды в доп. функциях, меньше кода и риска ошибок.
🔹 Когда ReentrantLock
Нужен tryLock, таймаут, прерывание, несколько Condition, или fairness.
🐸 Библиотека собеса по Java
#concurrency