В 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()
, или он продолжит работу и будет работать?