java併發編程的藝術學習第一部分

併發執行與串行執行對比
1.當併發執行累加操作不超過100萬次時,速度會比串行執行累加操作要慢,應爲線程有創建和上下文切換的開銷。

減少上下文切換的方法:

  • **無鎖併發編程:**多線程競爭鎖時,會引起上下文切換,所以多線程處理數據時,可以用一些辦法來避免使用鎖,如將數據的ID按照Hash算法取模分段,不同的線程處理不同段的數據
  • **CAS算法:**Java的Atomic包使用的CAS算法來更新數據,而不需要加鎖
  • **使用最少線程:**避免創建不需要的線程
  • 協程在單線程裏實現多任務的 調度,並在單線程裏維持多個任務間的切換

避免死鎖的方法:

  • 避免一個線程同時獲取多個鎖
  • 避免一個線程在鎖內同時佔用多個資源,儘量保證每個鎖只佔用一個資源
  • 嘗試使用定時鎖,使用lock.tryLock(timeout)來替代使用內部鎖機制
  • 對於數據庫鎖,枷鎖和解鎖必須在一個數據庫連接裏,否則會出現解鎖失敗的情況

資源限制的挑戰

資源限制指在進行併發編程時,程序的執行速度受限於計算機硬件資源或軟件資源。

如何解決資源限制問題:
對於硬件資源限制,可以考慮使用集羣並行執行程序。既然單機的組員有限制,那麼就讓程序在多機上運行
對於軟件資源限制,可以考慮使用資源池將資源複用。比如使用連接池將數據庫和Socket連接服用,捉着在調用對方webservice接口獲取數據時,只建立一個連接。
在資源限制情況下進行併發編程:
根據不同的資源限制調整程序的併發度

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