三個問題
- 競態條件
- 死鎖
- 內存可見性
規則
- 訪問共享變量時需要同步
- 讀線程和寫線程都要同步化
- 持有鎖的時間應該盡可能短
- 按照全局的固定的順序來獲得多把鎖
- 持有鎖時避免調用外星方法
java中的一些問題
- 編譯器的靜態優化可以打亂代碼的執行順序
- JVM的動態優化也會打亂代碼的執行順序
- 硬件可以通過亂序執行來優化其性能
線程
- 有時候一個線程的修改 可能對另一個線程不可見
java內存模型
- 如果讀線程和寫線程不進行同步,就不能保證可見性
- 同步方法
- 獲取對象內置鎖
- 開啟一個線程并且通過join()檢查線程是否已經終止。
- 使用java.util.concurrent包提供的工具