Sobes.tech
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 — для простых и безопасных случаев.