從0學習java併發編程實戰-讀書筆記-第一部分總結(5)
總結的內容來自原文的90-91頁
-
可變狀態是相當重要的。編程
- 全部的併發問題均可以歸結爲如何協調對併發狀態的訪問。可變狀態越少,越容易確保線程安全性。
- 儘可能將域聲明爲final類型,除非須要它們是可變的。
-
不可變對象必定是線程安全的。安全
- 不可變對象能極大的下降併發編程的複雜性。它們更爲簡單並且安全,能夠任意共享而無需使用加鎖或保護性複製等機制。
-
封裝有助於管理複雜性。併發
- 在編寫線程安全的程序時,雖然能夠將全部數據都保存在全局變量中,但爲何要這樣作?將數據封裝在對象中,更易於維持不變性條件:將同步機制封裝在對象中,更易於遵循同步策略。
- 用鎖來保護每一個可變對象。
- 當保護同一個不變性條件中的全部變量時,要用同一個鎖。
- 在執行復合操做期間,要持有鎖。
- 若是從多個線程中訪問同一個可變變量時沒有同步機制,那麼程序會出現問題。
- 不要故做聰明的推斷出不須要使用同步。
- 在設計過程當中考慮線程安全,或者在文檔中明確指出它不是線程安全的。
- 將同步策略文檔化。
歡迎關注本站公眾號,獲取更多信息