【发布时间】:2011-11-29 09:48:44
【问题描述】:
在 Java 中,当跨多个线程(通常)使用对象时,最好将字段设置为 final。例如,
public class ShareMe {
private final MyObject obj;
public ShareMe(MyObject obj) {
this.obj = obj;
}
}
在这种情况下,obj 的可见性将在多个线程中保持一致(假设 obj 也具有所有 final 字段),因为它是使用 final 关键字安全地构造的。
在 scala 中,似乎 val 不会编译为最终引用,而是 val 是 scala 中的语义,它阻止您重新分配变量 (Scala final variables in constructor)。如果 scala 构造函数变量未定义为 final,它们是否会遇到同样的问题(在 actor 中使用这些对象时)?
【问题讨论】:
标签: scala concurrency visibility final actor