Используют ли в Java ReentrantLock.lock()
и ReetrantLock.unlock()
тот же механизм блокировки, что и synchronized()
?
Моя догадка "Нет", но я надеюсь, что ошибаюсь.
Пример:
Представьте, что поток 1 и поток 2 имеют доступ к:
ReentrantLock lock = new ReentrantLock();
Поток 1 работает:
synchronized (lock) {
// blah
}
Поток 2 работает:
lock.lock();
try {
// blah
}
finally {
lock.unlock();
}
Предположим, что сначала поток 1 достигает своей части, а затем поток 2 до того, как поток 1 завершится: будет ли поток 2 ждать, пока поток 1 покинет блок synchronized()
, или он продолжит работу?