java併發變成實戰讀書筆記(1,2章節)

victor123發表於2018-04-14
  • 目標:共享的可變的狀態訪問
  • 解決的手段:
    • synchronized
    • volatile
    • 顯示鎖
    • 原子變數
  • 先保證正確,再保證效能
  • 什麼是執行緒安全的:當多個執行緒訪問某個類時,這個類始終都能便顯出正確的行為
  • 無狀態物件一定是執行緒安全的(all區域性變數)
  • 競爭條件:基於一種可能失效的觀察結果來做出判斷或者某個計算,"先檢查後執行"
  • 計數器:院子類
  • 快取一個key的value,得使用鎖,保證原子性
  • 用鎖來保護狀態: 如果用同步來協調對某個變數的訪問那麼訪問這個變數的所有位置上都需要使用同步
  • 雖然synchronized方法可以保證單個操作的原子性,但如果把多個操作合併為一個複合操作,還是需要額外的加鎖機制
  • 使用兩種不同的同步機制不僅會帶來混亂,也不會在效能或者安全性上帶來任何好處,因此這裡不使用原子變數
  • 在執行較長的方法上不要加鎖,例如io操作,或者比較重的計算操作

相關文章