Back to questions
Junior — Middle
63
Какое основное отличие между механизмом Lock и ключевым словом synchronized в управлении потоками?
Answer from AI
sobes.tech AI
Основное отличие между Lock (например, ReentrantLock) и ключевым словом synchronized в Java заключается в уровне контроля и гибкости управления блокировками:
-
synchronized — это встроенный механизм языка, который автоматически захватывает и освобождает монитор объекта. Он проще в использовании, но менее гибок. Блокировка и разблокировка происходят автоматически при входе и выходе из синхронизированного блока или метода.
-
Lock — это интерфейс из
java.util.concurrent.locks, который предоставляет более гибкие возможности:- Можно пытаться захватить блокировку с таймаутом (
tryLock(long time, TimeUnit unit)), что невозможно сsynchronized. - Можно явно освобождать блокировку в нужный момент (
unlock()), что даёт больше контроля. - Поддерживает более сложные сценарии, например, прерывание потока во время ожидания блокировки.
- Можно пытаться захватить блокировку с таймаутом (
Пример с ReentrantLock:
import java.util.concurrent.locks.ReentrantLock;
ReentrantLock lock = new ReentrantLock();
lock.lock();
try {
// критическая секция
} finally {
lock.unlock();
}
Таким образом, Lock подходит для более сложных сценариев синхронизации, а synchronized — для простых и безопасных случаев.