1.可變狀態是至關重要的。
所有的併發問題都可以歸結為如何協調對併發狀態的訪問,可變狀態越少,就越容易確保執行緒安全性。
2.盡量將域宣告為final型別,除非需要它們是可變的。
3.不可變物件一定是執行緒安全的。
不可變物件能極大地降低併發程式設計的複雜性。它們更為簡單而且安全,可以任意共享而無須使用加鎖或保護性複製等機制。
4.封裝有助於管理複雜性。
在編寫執行緒安全的程式時,雖然可以將所有資料都儲存在全域性變數中,但為什麼要這樣做?
將資料封裝在物件中,更易於維持不變性條件:將同步機制封裝在物件,更易於遵守同步策略
5.用鎖來保護每個可變變數
6.當保護同乙個不變性條件中的所有變數時,要使用同乙個鎖。
7.在執行復合操作期間,要持有鎖。
8.如果從多個執行緒中訪問同乙個可變變數時沒有同步機制,那麼程式會出現問題。
9.不要自作聰明地推斷出不需要使用同步。
10.在設計過程中考慮執行緒安全,或者在文件中明確指出它不是執行緒安全的。
11.將同步策略文件化。
java併發程式設計實戰 簡介
1 併發和並行的區別 併發 多個程式在同一時間段執行,只有乙個cpu。並行 多個程式在同一時刻執行,有多個cpu。2 執行緒帶來的風險 1 安全性問題 永遠不發生糟糕的事情 兩個或多個執行緒同時訪問乙個變數,可能會出現差錯。例如,兩個執行緒同時對乙個變數執行讀操作,從而它們得到了相同的值,違背了該變...
《Java併發程式設計實戰》 5
每當看到new thread runnable start 時,並且你希望獲得一種更靈活的執行策略時,請考慮使用excecutor來代替thread。completionservice將execute和blockingqueue的功能融合在一起。executorcompletionservice實現...
《Java併發程式設計實戰》 7
並非所有的任務有些任務需要明確地指明執行策略,包括 在一些任務中,需要擁有或排除某種特定的執行策略。如果某些任務依賴於其他的任務,那麼會要求執行緒池足夠大,從而確保它們依賴任務不會被放入等待佇列中或者被拒絕,而採用執行緒封閉機制的任務需要序列執行。通過將這些需求寫入文件,將來的 維護人員就不會由於使...