無法理解方法1和方法3是如何幫助實現安全發佈的。任何人都可以幫助我理解這個例子,如果可能的話。安全發佈
要安全地發佈對象,無論是 參考對象和 對象的狀態必須在同一時間內看到其他 線程。甲 正確構造的對象可以是 安全地發佈:
初始化從靜態初始化
存儲對它的引用到易失性字段或的AtomicReference
存儲一個對象引用參考它到一個正確構建的最終字段 對象
St或者將其引用到由鎖定適當保護的字段中。
無法理解方法1和方法3是如何幫助實現安全發佈的。任何人都可以幫助我理解這個例子,如果可能的話。安全發佈
要安全地發佈對象,無論是 參考對象和 對象的狀態必須在同一時間內看到其他 線程。甲 正確構造的對象可以是 安全地發佈:
初始化從靜態初始化
存儲對它的引用到易失性字段或的AtomicReference
存儲一個對象引用參考它到一個正確構建的最終字段 對象
St或者將其引用到由鎖定適當保護的字段中。
有在Java內存模型特定同步規則定義「之前發生」在決定當一個應用程序是保證看到它引用變量的「新鮮」值的Java程序的關係。 「安全發佈」方法實現了安全發佈,作爲同步規則和Java語言規範中規定的其他規則的邏輯結果。
JLS section 12.4.2指定類初始化的過程。在這個過程中發生的同步大概足以保證安全發佈。
JLS section 17.4.第2點處理易失性字段。 AtomicReferences的這個屬性是javadocs中指定行爲的結果。
要真正瞭解這個東西,你需要閱讀所有JLS第17條,細心,多次。
是的,只讀一次。是非常有幫助的,需要再讀一遍。謝謝你的回答和建議。 – devnull 2010-10-19 06:32:58
這將是2個問題。 – Raedwald 2017-01-26 09:20:01