在Java中,当跨多个线程(通常)使用对象时,最好将字段设为final.例如,
public class ShareMe {
private final MyObject obj;
public ShareMe(MyObject obj) {
this.obj = obj;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,obj的可见性将在多个线程中保持一致(假设obj具有所有最终字段),因为它是使用final关键字安全构造的.
在scala中,它不会出现val编译到最终引用,而是val是scala中的语义,阻止您重新分配变量(构造函数中的Scala最终变量).如果scala构造函数变量未定义为final,它们是否会遇到同样的问题(在actor中使用这些对象时)?