Java 併發編程實戰筆記(二)

發佈和逸出

“發佈”一個對象的意思是指,是對象能夠在當前作用域之外的代碼中使用。當某個不該發佈的對象被髮布時,這種情況就被稱爲逸出。

 

線程封閉

當訪問共享的可變數據時,通常需要使用同步。一種避免使用同步的方式是不共享數據。如果僅在單線程內訪問數據,就不需要同步。這種技術就做線程封閉。

ad-hoc線程封閉:維護線程封閉性的職責完全由程序實現來承擔。

棧封閉:只能通過局部變量才能訪問對象。

 

不變性

滿足同步需求的另一種方法就是使用不可變對象。

如果某個對象在被創建以後其狀態就不能被修改,那麼這個對象就稱爲不可變對象。不可變對象一定是線程安全的。

對象不可變性不等於將對象中所有的域都聲明爲final類型,即是對象中所有的域都是final類型的,這個對象也仍然是可變的,因爲在final類型的域中可以保存對可變對象的引用。

對象不可變滿足:

  • 對象創建以後其狀態就不能修改
  • 對象的所有域都是final類型
  • 對象是正確創建的(在對象的創建期間,this引用沒有逸出)

正如“除非需要更高的可見性,否則應將所有的域都聲明爲私有域是一個良好的習慣,”除非需要某個域可變,否則應將其聲明爲final域"也是一個良好的編程習慣

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章