Мне не нужно много опыта в многопоточности. Поэтому не уверен, что я получил право на следующий код Java, декомпилированный из Kotlin.
Вот код Котлина:
companion object {
@Volatile private var INSTANCE: SomeDatabase? = null
fun getInstance(context: Context): SomeDatabase =
INSTANCE ?: synchronized(this) {
INSTANCE ?: buildDatabase(context).also { INSTANCE = it }
}
}
Вот декомпилированный код в Java:
SomeDatabase var10000 = ((SomeDatabase.Companion)this).getINSTANCE();
if (var10000 == null) {
synchronized(this){}
SomeDatabase var4;
try {
var10000 = SomeDatabase.Companion.getINSTANCE();
if (var10000 == null) {
...
var10000 = var4;
}
return var10000;
Разве это не означает, что код фактически не синхронизирован из-за пустого блока в synchronized(this){}
?