No.1 --什么是多線程
** 舉個栗子????**
單進程單線程:一個人在一張桌子上吃菜
單進程多線程:多個人在同一張桌子上吃菜
多進程單線程:多個人每個人都在自己的桌子上吃菜
1.對于 Windows 系統(tǒng)來說,【開桌子】的開銷很大,因此 Windows 鼓勵大家在一個桌子上吃菜。
因此 Windows 多線程重點是要大量面對資源爭搶與同步方面的問題。
2.對于 Linux 系統(tǒng)來說,【開桌子】的開銷很小,因此 Linux 鼓勵大家盡量每個人都開自己的桌子吃菜。這帶來新的問題是:坐在兩張不同的桌子上,說話不方便。
因此,Linux 下的重點是進程間通訊的方法。
開桌子的意思是指創(chuàng)建進程。 開銷這里主要指的是時間開銷。兩者開銷大約相差一百倍。
No.2--為什么使用多線程
<br />
- 比較耗時的操作處理,使用多線程可以提高應(yīng)用程序響應(yīng)
例如,C/S 的服務(wù)器處理時就是用多線程,可以提高用戶體驗;再比如 ajax調(diào)用,就是瀏覽器會啟一個新的線程,不阻塞當(dāng)前頁面的正常操作; - 多cpu的系統(tǒng)中,使用線程可以提高cpu利用率
- 改善程序結(jié)構(gòu),例如 一個既長又復(fù)雜的進程可以考慮拆分為多個線程,成為幾個獨立運行的部分,這樣的程序便于理解和維護。
No.3--關(guān)鍵字
<br />
線程生命周期
***sleep(long millis) ***
使線程進入阻塞狀態(tài),不會釋放鎖對象,等阻塞時間結(jié)束后,線程進入阻塞狀態(tài)。
***yield() ***
暫停當(dāng)前正在執(zhí)行的線程,不會釋放鎖對象,讓出時間片給其他線程,線程進入可運行狀態(tài)。
interrupt()
強行中斷線程。如果線程A希望立即結(jié)束線程B,則可以對線程B對應(yīng)的Thread實例調(diào)用interrupt方法。如果此刻線程B正在wait/sleep /join,則線程B會立刻拋出InterruptedException,在catch() {} 中直接return即可安全地結(jié)束線程。
Obj.wait(),Obj.notify
線程等待、喚醒。
必須在synchronized(Obj){...}語句塊內(nèi)。
wait、sleep和yield的區(qū)別
sleep不分優(yōu)先級,會給低優(yōu)先級的線程運行的機會,yield會選擇相同優(yōu)先級或者更高優(yōu)先級線程進行退讓,所以yield()之后,可能還是此線程獲得執(zhí)行權(quán)。
***synchronized ***
java中Object就像一座大房子,synchronized修飾的方法就像上了鎖的門。普通方法就是沒有鎖的門。實例對象就是鑰匙。
當(dāng)一個實例的線程訪問某synchronized方法時,該實例的其他線程就不能訪問其他synchronized方法,但是可以無限制訪問非synchronized方法。<br />
- 當(dāng)synchronized修飾方法時,這就好比一個房子中??只有一把,當(dāng)獲得??的時候,可以打開上鎖的門,但要訪問此房子其他上鎖的門,就必須先退出房間,把??返回大門口,總之就是,同一時間,只能打開一扇上鎖的門,可以隨意打開不上鎖的門。
- 當(dāng)synchronized修飾方法內(nèi)的代碼塊,使用synchronized (this){…}時,相當(dāng)于在房間內(nèi)再加上一個上鎖的柜子,這個柜子的鎖可以是從其他房子拿過來的,也可以是本房子內(nèi)的。房間也可上鎖可不鎖,但要打開柜子,必須滿足門能打開,并且擁有開柜子的??。
- 當(dāng)synchronized修飾static的方法時,相當(dāng)于給此房子所在的小區(qū)(小區(qū)內(nèi)都是相同款式的房子,也就是說這些Object是相同的class)配置了一個公共的??,若是進不上鎖的房子,沒有任何影響,若是要進上鎖的房子,需要帶上??,帶著??,因為只有一個??和一把??,所以要想進入上鎖的房間,就必須等待??和??都空閑才可以,即使你有另一個房間的??,但是因為你住的是小區(qū)房(synchronized修飾的statis 方法),就不能直接去打開上鎖的房間,你需要等待保安出來后,帶著保安一同前去。
synchronized鎖類型說明demo可參考另一篇文章 * 《synchronized實例解釋 》*http://www.lxweimin.com/p/24b6fe364fdf
多線程實現(xiàn) 生產(chǎn)者-消費者模型 http://www.lxweimin.com/p/2740ab3b584c