多级Java同步

如下面的示例所示,一旦对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.

上一篇:Java在线程启动之前发生


下一篇:c – CUDA条件线程同步