в котлине, есть синхронизированный блок
synchronized(_lock) {
// code do something
}
это означало снять блокировку, пока все // code fo something
не будет сделано.
но в декомпилированном коде Java синхронизированный блок (блокировка) помещается за пределы блока кода
Object var1 = this._lock;
synchronized(var1){}
// code do something
, означает ли это, что блокировка будет снята слишком рано, чтобы // code fo something
мог все еще работать?
код котлина:
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;
}