1,進(jìn)程
對于一個CPU來講在某一個時間點(diǎn)指定執(zhí)行一個進(jìn)程,操作系統(tǒng)會為每個進(jìn)程分配一段有限的cpu使用時間2,線程
每個程序都是一個進(jìn)程,進(jìn)程里面還可以有多個執(zhí)行單元同時運(yùn)行,這些執(zhí)行單元可以看作執(zhí)行的一條條線程3,線程的創(chuàng)建
//第一種方法:通過繼承Thread類來進(jìn)行開啟多線程package book;public class Threadtext { public static void main(String []args){ students stu=new students();//創(chuàng)建類的實(shí)例對象 stu.start();//開啟students線程 while(true){ System.out.4,兩種方法的對比1,通過繼承thread類開啟的進(jìn)程必須要進(jìn)行實(shí)例化才能進(jìn)行開啟,在進(jìn)行實(shí)例化的時候就必須創(chuàng)建了一個對象,如果開啟對個實(shí)例化對象,那么每個都會重復(fù)地開啟線程,所以不能在進(jìn)行資源統(tǒng)一的時候使用2,實(shí)現(xiàn)Runnable接口的話僅僅開啟線程的話,在開啟一個新的線程的話參數(shù)傳入的都是同一個實(shí)例對象,所以多個實(shí)例化對象使用的資源都是統(tǒng)一的3,由于java是單繼承,所以在繼承了Thread類后無法再次繼承其他的類所以不建議使用第一種方法5,線程的生命周期及狀態(tài)轉(zhuǎn)換
1,新建狀態(tài):在創(chuàng)建一個線程對象后,該線程就處于新建狀態(tài),他此時不能夠運(yùn)行,和其他的java程序一樣,僅僅由java虛擬機(jī)為其分配了內(nèi)存,但是沒有表現(xiàn)出任何線程的動態(tài)信息。2,當(dāng)線程調(diào)用了start方法后,該線程就進(jìn)入了繼續(xù)狀態(tài),也稱作可運(yùn)行狀態(tài),處于就緒狀態(tài)的線程位于可運(yùn)行池中,此時他僅僅是具備了可運(yùn)行的條件,能否獲得cpu使用權(quán)還需要等待系統(tǒng)進(jìn)行調(diào)度。3,就緒狀態(tài):獲得了cpu使用權(quán),開始執(zhí)行Run方法中的線程執(zhí)行體,該線程處于運(yùn)行狀態(tài)。4,堵塞狀態(tài):正在運(yùn)行的情況下,如執(zhí)行耗時的輸入、輸出操作時就會放棄cpu的使用權(quán)力,線程進(jìn)行堵塞狀態(tài)后不能進(jìn)入排隊隊列,只有當(dāng)引起堵塞的因素消除后,線程才可能進(jìn)入到就緒狀態(tài)。5,死亡狀態(tài):線程中的run方法正常執(zhí)行完畢,或者線程拋出一個未捕獲的異常,錯誤,線程就會進(jìn)入死亡狀態(tài),一旦進(jìn)入死亡狀態(tài)線程就不會再次擁有運(yùn)行的資格,也不能轉(zhuǎn)換到其他狀態(tài);
6,線程的調(diào)度
新聞熱點(diǎn)
疑難解答