一禀酱、上下文切換
- 含義
CPU通過給每個線程分配時間片來實現(xiàn)多線程略板,時間片一般是幾十毫秒。當(dāng)任務(wù)時間片用光后會切到下一個任務(wù)边败,但是袱衷,在切換前會保存上一個任務(wù)的狀態(tài),以便切換回這個任務(wù)的時候可以再加載這個任務(wù)笑窜。任務(wù)從保存狀態(tài)到再加載的過程就是一次上下文的切換致燥。 - 如何減少上下文切換
(1)無鎖并發(fā)編程。如將數(shù)據(jù)合理分段排截,不同線程處理不同不同段數(shù)據(jù)嫌蚤。
(2)CAS算法辐益。Java的Atomic包使用CAS算法,就不需要鎖脱吱。
(3)避免創(chuàng)建不需要的線程智政。
(4)協(xié)程。
二箱蝠、死鎖
避免死鎖的常見方法:
(1)避免一個線程同時獲取多個鎖续捂。
(2)避免一個線程在鎖內(nèi)同時占用多個資源。
(3)嘗試使用定時鎖宦搬,trylock等牙瓢。
(4)對于數(shù)據(jù)庫鎖,加鎖和解鎖必須在一個數(shù)據(jù)庫連接里间校。
三矾克、其他
(1)thread.join()
等待thread執(zhí)行完畢后,在繼續(xù)執(zhí)行當(dāng)前線程撇簿。