Java: 锁重入对性能影响有多大?

如下,commonDo可能被多个方法(有可能不同步的)调用,在specialDo调用commonDo会重入锁,对性能影响大吗?
是不是最好把commonDo()的代码直接放在specialDo里比较好?虽然代码冗余,但是性能好?

class MyClass{
    public synchronized void specialDo(){
       ...
       commonDo();
    }

    public synchronized void commonDo(){
       ...
    }
}
阅读 4.6k
3 个回答

重进锁仅仅在基数 +1,性能影响基本可以忽略。类似的做法,可以参考ReentrantLock

synchronized底层是通过monitorenter 和 monitorexit指令来实现的。具体介绍推荐此文
synchronized可重入的机理,只是在内部判断一下当前线程是否具有锁住对象的monitor权限,如果当前线程已经拥有了,则只是简单地作计数+1。所以锁是否重入并不影响性能。

这个方法上的锁有用吗?如果每个线程都会创建一个对象,锁是没有任何用处的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题