Java: 锁重入对性能影响有多大?
如下,commonDo可能被多个方法(有可能不同步的)调用,在specialDo调用commonDo会重入锁,对性能影响大吗?
是不是最好把commonDo()的代码直接放在specialDo里比较好?虽然代码冗余,但是性能好?
class MyClass{
public synchronized void specialDo(){
...
commonDo();
}
public synchronized void commonDo(){
...
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
重进锁仅仅在基数 +1,性能影响基本可以忽略。类似的做法,可以参考
ReentrantLock
synchronized底层是通过monitorenter 和 monitorexit指令来实现的。具体介绍推荐此文
synchronized可重入的机理,只是在内部判断一下当前线程是否具有锁住对象的monitor权限,如果当前线程已经拥有了,则只是简单地作计数+1。所以锁是否重入并不影响性能。
这个方法上的锁有用吗?如果每个线程都会创建一个对象,锁是没有任何用处的