。 我在練習冊中遵循Java Concurrency。 當涉及到安全地發佈,特別是與最終的,我很清楚,首先參考將是所有其他線程可見,其次發佈的對象的狀態是任何其他線程可見,但這裏的問題是,如果狀態引用的數組元素保證在它發佈的狀態下可見? (當然,只要沒有人修改這些數據對象)。Java只是爲了確保安全地發佈最終的
例子:
@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")};
}
}
據我所知,最後表明(對於對象)引用不會改變。但是,該對象的內部狀態可能仍然會發生變化,並且線程仍然可以使用它們自己的內部緩存。 volatile關鍵字阻止線程保留自己的緩存 –
發佈之後,引用的對象及其引用的對象不會更改...讓我們按慣例說。我想知道使用final字段進行安全發佈後數組內引用的可變對象的可見性。 – user2050516