併發程式設計實踐筆記 物件的共享之發布與逸出

2021-09-01 17:19:24 字數 454 閱讀 1498

發布

物件的發布是指:使物件能夠在當前作用域之外的**中使用。例如在乙個非私有的方法中將私有屬性的物件引用直接返回。

逸出

是指當某個不該被發布的物件被發布出去。例如,如果在物件完成構造之前就將其發布出去,就會破壞執行緒安全性。

警惕this引用逸出。當從物件的建構函式中發布物件的時候,只是發布了乙個未構造完成的物件。在構造過程中使用this引用逸出的乙個常見的現象是:在建構函式中啟動乙個執行緒,無論是顯式建立(將它傳遞給建構函式)還是隱式建立(由於thread或者runable是該物件的乙個內部類),this引用都會被新建立的執行緒共享。對應this應用逸出的方法是,將建構函式宣告為私有,同時提供乙個工廠方法提供物件,在工廠方法中完成構造並且發布。

安全發布的常用模式 

要安全的發布乙個物件,物件的引用及物件的狀態必須同時對其他執行緒可見

併發程式設計實踐筆記 物件的共享之可見性

當讀操作和寫操作發生在不同的執行緒中,對共享變數的讀和寫操作會產生意料之外的結果。為了確保多個執行緒之間對記憶體寫入操作的可見性,必須使用同步機制。加鎖的含義不僅僅侷限於互斥行為,還包括記憶體可見性。為了確保所有執行緒都能看到共享變數的最新值,所有執行讀操作或者寫操作的執行緒都必須在同乙個鎖上進行。...

java併發程式設計實戰 物件的共享

一 可見性 當讀操作和寫操作在不同的執行緒進行的時候,並不能保證讀的執行緒可以讀到寫執行緒最新的更改。如果要確保記憶體對寫入操作的可見性,就必須使用同步。處理器還會對程式中的操作進行重排序。重排序保證在單執行緒的執 況下,和不重排序得到的結果一樣,但是多執行緒的話,就不一定了。乙個簡單的方法避免所有...

學習筆記 併發程式設計實戰 第3章 物件的共享

乙個共享變數被乙個執行緒修改後,另外乙個執行緒能夠正確的獲取到共享變數最新值,此共享變數具有可見性。缺乏同步的共享變數,在多執行緒訪問中,就可能獲取到失效資料,從而導致不可預見的錯誤。正常情況下,即使是非同步變數,不同執行緒獲取到的不是最新資料,為失效資料,但至少它是之前存在過的值,這個值曾經出現過...