天天看點

java并發程式設計的藝術學習第一部分

java并發程式設計的藝術學習第一部分

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

減少上下文切換的方法:

  • **無鎖并發程式設計:**多線程競争鎖時,會引起上下文切換,是以多線程處理資料時,可以用一些辦法來避免使用鎖,如将資料的ID按照Hash算法取模分段,不同的線程處理不同段的資料
  • **CAS算法:**Java的Atomic包使用的CAS算法來更新資料,而不需要加鎖
  • **使用最少線程:**避免建立不需要的線程
  • 協程在單線程裡實作多任務的 排程,并在單線程裡維持多個任務間的切換

避免死鎖的方法:

  • 避免一個線程同時擷取多個鎖
  • 避免一個線程在鎖内同時占用多個資源,盡量保證每個鎖隻占用一個資源
  • 嘗試使用定時鎖,使用lock.tryLock(timeout)來替代使用内部鎖機制
  • 對于資料庫鎖,枷鎖和解鎖必須在一個資料庫連接配接裡,否則會出現解鎖失敗的情況

資源限制的挑戰

資源限制指在進行并發程式設計時,程式的執行速度受限于計算機硬體資源或軟體資源。

如何解決資源限制問題:

對于硬體資源限制,可以考慮使用叢集并行執行程式。既然單機的組員有限制,那麼就讓程式在多機上運作

對于軟體資源限制,可以考慮使用資源池将資源複用。比如使用連接配接池将資料庫和Socket連接配接服用,捉着在調用對方webservice接口擷取資料時,隻建立一個連接配接。

在資源限制情況下進行并發程式設計:

根據不同的資源限制調整程式的并發度