Как показано в примере ниже, после того, как блокировка выполняется над объектом в методе call
, нет необходимости в дополнительных методах для использования ключевого слова.Синхронизация на уровне java-поведения на уровне
public class Prac
{
public static void main(String[] args)
{
new Prac().call();
}
private synchronized void call()
{
further();
}
private synchronized void further()
{
oneMore();
}
private synchronized void oneMore()
{
// do something
}
}
Но, если я все-таки добавить synchronized
ключевое слово в further
и onceMore
, чем Java делает на таких встречах? Проверяет ли java, требуется ли блокировка или нет? или как вызов метода находится в одном стеке, он просто продолжается, не проверяя, требуется ли блокировка или нет, поскольку блокировка уже получена.
Примечание: Мое сомнение в том, как java будет вести себя в такой ситуации, я не уверен, но я думаю, что это отличается от предвзятой блокировки.
проверяет ли блокировка накладные расходы на производительность? – Batty