亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

happens-before規則和初始化安全規則之間的關系

happens-before規則和初始化安全規則之間的關系

牛魔王的故事 2023-09-27 15:23:37
我正在閱讀《Java 并發實踐》一書。在閱讀有關 JMM 的章節時,它說:JMM 為程序中的所有操作定義了一個名為“happens-before”的部分排序。為了保證執行動作B的線程可以看到動作A的結果(無論A和B是否發生在不同的線程中), A和B之間必須存在happens-before關系。但是,我無法使用任何“發生前”規則來派生“初始化安全”規則:初始化安全保證對于正確構造的對象,所有線程都將看到構造函數設置的最終字段的正確值,無論對象如何發布。我們可以使用happens-before規則來推導“初始化安全”規則,還是這兩個概念只是同一級別的抽象?
查看完整描述

1 回答

?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

“初始化安全規則”是一種特殊的規則,不能從其他的happens-before關系中推導出來,也不能與其他的happens-before關系結合起來派生出更多的規則。

該規則在JLS §17.5 最終字段語義中指定:

final字段還允許程序員無需同步即可實現線程安全的不可變對象。線程安全的不可變對象被所有線程視為不可變,即使使用數據爭用在線程之間傳遞對不可變對象的引用也是如此。這可以提供安全保證,防止錯誤或惡意代碼濫用不可變類。final必須正確使用字段以保證不變性。

該章太長,無法完整引用,但我想強調這一具體聲明:

happens-before排序不會與其他happens-before排序傳遞地關閉。

因此,除了其他先發生關系之外,還存在“初始化安全規則”,以幫助構建不可變對象。


查看完整回答
反對 回復 2023-09-27
  • 1 回答
  • 0 關注
  • 95 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號