JAVA多執行緒(二):執行緒上下文切換、死鎖及守護執行緒
阿新 • • 發佈:2020-12-23
說明:這篇部落格是我讀《JAVA併發程式設計之美》後的一個總結。如有侵權請聯絡刪除。同時說明以下內容僅代表個人觀點,如果有不清除或是有錯誤的地方,歡迎大家批評指正!!!
目錄
1. 執行緒上下文切換
-
什麼是執行緒上下文切換?
在我們的電腦上執行著很多的執行緒,執行緒的數量往往是大於CPU的數量的,而一個CPU同一時刻只能被一個執行緒佔用。為了讓我們感覺多執行緒是同時執行的,CPU採用時間片輪轉機制,每個執行緒分配相應的時間片,時間片結束時需要儲存當前執行緒的執行狀態,然後轉換為就緒態,這就是執行緒上下文切換。
-
執行緒上下文切換的時機有哪些?
以下情況會發生執行緒上下文切換:
a.當前執行緒的時間片用完。
b.當前執行緒在執行的過程中被其他執行緒打斷了。
2. 死鎖
-
什麼是死鎖
死鎖:兩個執行緒互相持有對方所需要的鎖的同時希望獲取對方持有的鎖而造成程式無法繼續執行。
-
死鎖產生的條件
a.互斥條件:執行緒對獲取到的資源是排他性使用的,即只能自己使用,其他執行緒無法使用。
b.請求並持有條件:指的是當前執行緒已經持有至少一個資源的同時去請求其他資源。
c.不可剝奪條件:指執行緒在使用完已持有的資源前,其他執行緒無法搶佔。
d.環路等待:指的是發生死鎖的情況下,一定存在一個“執行緒———資源”的環形鏈。如A執行緒等B執行緒佔用的資源,而B執行緒在等A執行緒佔用的資源。
-
怎麼避免死鎖
觀察上面條件,學過作業系統的小夥伴們肯定知道(借用書中的話