Kotlin的val是否具备与Java final相同的内存可见性保证?
Kotlin的val是否等价于Java的final以保证内存可见性?
是的,Kotlin的val声明的类属性,在编译后的Java字节码中会被处理为final字段,因此能提供和Java中final字段完全相同的内存可见性保证。
具体到你的代码:
class MyClass { private val myLock = ReentrantLock() ... }
编译后对应的Java逻辑大致为:
class MyClass { private final ReentrantLock myLock; public MyClass() { myLock = new ReentrantLock(); ... } }
按照Java内存模型的规则,final字段完成正确初始化后,其他线程访问该字段时,能确保看到的是完全初始化后的对象状态,不会出现半初始化的情况。Kotlin的val完全遵循这一规则,所以你无需额外处理,它的内存可见性保证和Java的final完全一致。
内容的提问来源于stack exchange,提问作者gstackoverflow
相关产品推荐
相关产品推荐

