在高度并发的 Java 程序中,假设我的方法已正确编写并正确同步,我想知道如何确定哪个更好:
void synchronized something() {
...
}
or
void something() {
synchronized(this) {
...
}
// here do stuff no requiring synchronization
.
. // do computation 'A'
.
synchronized(this) {
...
}
// here do other stuff no requiring synchronization
.
. // do computation 'B'
.
synchronized(this) {
...
}
}
现在我意识到,如果计算“A”和“B”需要花费大量时间,那么第二个版本显然更好。
然而,我的问题是:您在什么时候知道第二个版本更有效?
第二个版本总是更快,或者多次获取/释放锁是否存在隐藏成本?
如果我的计算“A”只是一些微不足道的事情,例如:
s.getString().substring( 0, 2 ).toLowerCase();
Yes, synchronized
花费时间。如果实际计算很简单并且在循环内,那么它的成本lots与实际计算时间相比。
看这个例子:http://ideone.com/zgpB7
- 内部同步:约0.025s
- 整个循环同步:小于0.001s
要确定哪一个更适合您的程序,请让它执行一些操作并查看哪个时间更快。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)