1垮耳、線程是一個程序內(nèi)部的順序控制流绍豁;
2竹揍、線程與進(jìn)程的區(qū)別:
(1)每個進(jìn)程都有獨立的代碼和數(shù)據(jù)空間(進(jìn)程上下文),進(jìn)程間的切換會有較大開銷乳蛾;
(2)線程可看成輕量級進(jìn)程税迷,同一類線程共享代碼和數(shù)據(jù)空間毕泌,每個線程有獨立的運(yùn)行棧和程序計數(shù)器(PC),線程切換的開銷性柑狻仔夺;
(3)多進(jìn)程:在操作系統(tǒng)中能同時運(yùn)行多個任務(wù)(程序);
(4)多線程:在同一應(yīng)用程序中有多個控制流同時執(zhí)行瓢宦;
3碎连、java線程通過java.lang.Thread類來實現(xiàn);
4驮履、每個線程通過Thread對象所對應(yīng)的方法run()來完成操作鱼辙,run()稱為方法體;
5玫镐、通過調(diào)用Thread類的start()方法啟動線程倒戏;
6、如果直接調(diào)用run()方法而不調(diào)用start()方法恐似,則相當(dāng)于只有普通的函數(shù)調(diào)用杜跷,并沒有啟動線程;
7矫夷、Java中創(chuàng)建線程的主要方法有兩個:
(1)通過繼承Thread類創(chuàng)建葛闷;
(2)通過實現(xiàn)接口Runnable來實現(xiàn);
注意:建議創(chuàng)建線程的時候最好采用實現(xiàn)接口的方式双藕,因為采用繼承的話只能繼承一個類淑趾,而采用接口可以實現(xiàn)多個接口,顯然更加方便和更加可擴(kuò)展蔓彩。
8治笨、多線程中sleep()、wait()赤嚼、yield()、join()的用法與區(qū)別:
(1)sleep()和yield()方法都是Thread類的靜態(tài)方法顺又,都會使當(dāng)前處于運(yùn)行狀態(tài)的線程放棄CPU更卒,把運(yùn)行機(jī)會讓給別的線程;
(2)sleep()會給其他線程機(jī)會稚照,而不會考慮它的優(yōu)先級蹂空;而yield()方法只會給相同優(yōu)先級或者更高優(yōu)先級的線程一個運(yùn)行的機(jī)會俯萌;
(3)當(dāng)線程執(zhí)行了sleep(long millis)方法后,將轉(zhuǎn)到阻塞狀態(tài)上枕;而執(zhí)行yield()方法后則會轉(zhuǎn)到就緒狀態(tài)咐熙;
(4)sleep()比yield()有更好的可移植性;
(5)jion()方法:等待某個線程的終止辨萍。等待調(diào)用jion()方法的線程結(jié)束棋恼,再繼續(xù)執(zhí)行。