如下面的示例所示,一旦对call in object中的对象进行了锁定,就不需要其他方法来使用synchronized关键字.
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关键字添加到更多和更多,那么性能将如何受到影响?或者根本不受影响?
编辑:如果需要锁定或锁定,是否会增加检查成本(遇到synchronized关键字后)?在内部这种检查增加了开销吗?
编辑:应用程序不会只有一个线程,这里的代码只是示例代码.可以用run方法替换main
解决方法:
性能不会受到影响.获得已经获得的锁只会带来任何成本.此技术称为biased locking.默认情况下,启用偏置锁定.这就是为什么单线程应用程序不会受到调用synchronized方法的影响.
Java SE 6 Performance White Paper:
An object is “biased” toward the thread which first acquires its monitor via a monitorenter bytecode or synchronized method invocation; subsequent monitor-related operations can be performed by that thread without using atomic operations resulting in much better performance, particularly on multiprocessor machines.