只想确认一下。我正在关注 Java Concurrency in practice book。当谈到安全发布时,尤其是使用 final 时,我很清楚首先引用将对所有其他线程可见,其次发布对象的状态对任何其他线程都是可见的,但这里的问题是,如果引用的数组元素是否保证在发布状态时可见?(当然只要没有人修改这些数据对象)。
例子:
@Mutable
public class NotThreadsafeDataObject {
private String message;
public NotThreadsafeDataObject (String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
现在让我们安全地发布一组可变对象:
public class Publish {
public final NotThreadsafeDataObject[] publish;
public Publish() {
publish = new NotThreadsafeDataObject[] { new NotThreadsafeDataObject("one"), new NotThreadsafeDataObject("two")};
}
}