【发布时间】:2018-11-15 16:23:06
【问题描述】:
考虑这段代码:
void A() {
synchronized (obj) {
for (int i = 0; i < 1000; i++) {
B();
}
}
}
void B() {
synchronized (obj) {
// Do something
}
}
调用 A 时“同步”的开销是多少?会不会接近只有一个“同步”的开销?
【问题讨论】:
-
“开销”是什么意思?内存消耗?运行?还有什么?
-
我的意思是运行时!
-
会更多,因为同步被调用的次数是单次调用用例的 1000 倍。因此,VM 必须在
obj上添加 1000 个额外的锁定令牌。 -
@Korashen 不明白它已经获得了锁吗?
标签: java synchronized