【发布时间】:2019-04-18 20:18:33
【问题描述】:
在kotlin中,有同步块
synchronized(_lock) {
// code do something
}
这意味着释放锁,直到所有// code fo something完成。
但在反编译的 java 代码中,同步(锁定)块被放在代码块之外
Object var1 = this._lock;
synchronized(var1){}
// code do something
,这是否意味着锁定将被释放得太早以至于// code fo something 可能仍在运行?
kotlin 代码:
override fun doSomething(): Boolean {
synchronized(_lock) {
//......
lastCompleteAt = Date().time + REQUEST_THROTTLE_TIME
for ((_, handler) in dataRequestMap) {
//......
}
return true
}
}
反编译成java代码:
public boolean doSomething() {
Object var1 = this._lock;
synchronized(var1){}
boolean var7;
try {
//......
this.lastCompleteAt = (new Date()).getTime() + 5000L;
Map var3 = (Map)this.dataRequestMap;
Iterator var4 = var3.entrySet().iterator();
while(var4.hasNext()) {
//......
}
//......
var7 = true;
} finally {
;
}
return var7;
}
【问题讨论】:
-
你的反编译器可能只是反编译不正确。
标签: kotlin locking synchronized