發布逸出
(1)發布:發布是指將乙個物件,使其引用儲存到乙個其他**可以訪問到的地方,在乙個非私有方法返回這個引用,也可以把它傳遞到其他物件中.
a) 發布最簡單的就是將物件設定到公共靜態域中
b) 發布第二種簡單的方式就是在乙個公共方法內直接return 物件的引用
第三種的發布就很隱秘了.就是講自身的物件引用發布到另乙個物件的引用中.
可能在構造中出現如此這就是this例如:
這樣 source就持有thisescape的內部類evenlistener()而evenlistener可能會帶出thisescape中的保護資料引用,可以使用工廠和私有構造防止發布逸出,這樣thisescape物件就可以構造完成然後使用thisescape.registerlistener(source)放入***.最好不要在構造內註冊***或者啟動執行緒.而在工廠內初始化這些事情.
class a1
public class mythread;
}public static mythread newinstance(a1 a)
}
其實a1中的l我沒有封裝.應該加以封裝.我只是掩飾下如何註冊
(2)逸出:如果物件在沒有構造完成前就將其發布,這就是逸出.在構造中啟動執行緒,會使未構造完成的物件發布出去,造成逸出.
(3)如何安全的發布:
a) 通常發布執行緒與消費執行緒需要同步化.
b) 通過靜態初始化初始物件的引用.
c) 引用儲存到volatile或者atomicreference
d) 引用儲存到正確建立物件的final域中
(4)如果需要發布乙個非執行緒安全的狀態集(就是包含基本型別的物件),可以先複製物件,然後發布複製後的物件.這樣避免外來客戶修改非執行緒安全的類.造成同步錯誤.這前提是不需要此集合狀態在多個執行緒間一致.
(5)發布乙個執行緒安全的類,並不需要複製-發布.
(6)可以安全的發布乙個執行緒安全的類並且發布時不需要有任何我約束行為
物件的共享(一) 發布和逸出
發布 publish 乙個物件的意思是,是物件能夠在當前作用域之外的 中使用。例如,將乙個指向該物件的引用儲存到其他 可以訪問的地方,或者是在某乙個非私有的方法中返回該物件的引用,或者將物件的引用傳遞到其他類的方法中。逸出 escape 當某個不應該發布的物件被發布時。上面的定義比較抽象,下面看乙個...
Python Qt 學習筆記(四) 發布程式
pip install pyinstallerpyinstaller 支援 python 2.7 和 python 3.3 以後的版本。支援在 windows,mac os x,linux 系統上打包出 可執行程式。將之前寫的qt介面程式打包,進入要打包的py檔案所在目錄,在命令列裡執行下面命令 p...
併發程式設計實踐筆記 物件的共享之發布與逸出
發布 物件的發布是指 使物件能夠在當前作用域之外的 中使用。例如在乙個非私有的方法中將私有屬性的物件引用直接返回。逸出 是指當某個不該被發布的物件被發布出去。例如,如果在物件完成構造之前就將其發布出去,就會破壞執行緒安全性。警惕this引用逸出。當從物件的建構函式中發布物件的時候,只是發布了乙個未構...