1. 程式人生 > 其它 >Java:Java多執行緒

Java:Java多執行緒

1. 為什麼要使用多執行緒?

1)從計算機底層來說

  • 執行緒可比作輕量級程序,是程式執行的最小單位,執行緒間切換和排程的成本遠遠小於程序;
  • 另外,多核CPU可支援多個執行緒同時執行,降低了執行緒上下文切換的開銷。
    單核計算機時代: 主要是為了提高CPU和IO裝置等的綜合利用率(如果只有一個執行緒,CPU執行時,IO空閒,IO執行時,CPU空閒,利用率只有50%,多執行緒可以一個CPU計算式,另一個進行IO操作)
    多核計算機時代: 主要是為了提高計算機CPU利用率(如果只用一個CPU核心,其他核心空閒,多執行緒可以充分利用多個CPU核心)

2)從網際網路發展趨勢來說

  • 當前系統動不動就會需要百萬級甚至千萬級的併發量;
  • 多執行緒併發程式設計是支援高併發系統的基礎,利用好多執行緒可提高系統整體併發能力及效能。

2. 使用多執行緒可能帶來什麼問題?(怎麼解決這些問題?)

  • 記憶體洩漏
  • 上下文切換
  • 死鎖

3. 什麼是上下文切換?

  • 一個任務在CPU時間片用完時,會先儲存自己的任務狀態再切換到其他任務,這樣下次載入時就從儲存的位置開始執行。任務從儲存到再載入的過程就叫做上下文切換。

詳解:多執行緒程式設計時,一般執行緒數會大於CPU核心數。而一個CPU核心一次只能執行一個執行緒。為使所有執行緒都得到有效的執行,CPU採取的策略是每個執行緒分配一個時間片並輪轉的方式。一個執行緒執行完自己的時間片就會重新進入就緒狀態,CPU讓給其他執行緒使用,等待下次時間片。這個過程就是一次上下文切換。

步履不停