執行緒的狀態
執行緒的常用方法
自行建立執行緒池的七大引數 new threadpoolexecutor
執行wxecutorservices.execute(runnable command)
採用實現runnable、callable介面的方式建立執行緒 2、使用繼承thread類的方式建立多執行緒執行緒了只是實現了runnble介面或者callable介面,還可以繼承其他類。在這種方式下,多個執行緒可以共享同乙個target物件,所以非常適合多個相同執行緒來處理同乙份資源的情況,從而可以將cpu,**和資料分開。但是,缺點是程式設計稍微複雜,如果要訪問當前執行緒,則必須使用thread.currentthread
如果需要訪問當前執行緒,則無需使用thread.currentthread()方法,直接使用this即可 獲得當前執行緒。缺點是執行緒類已經繼承了thread類,就不能再繼承其他父類了 3、runnable和callable的區別
在thread.state類中進行了定義
新建狀態
表示剛剛建立的執行緒,這些執行緒還沒有執行
可執行
可能正在執行,也餓能正在等待cpu時間片
阻塞
等待獲取乙個排他鎖,其他執行緒釋放了鎖就會結束此狀態
無線期等待
等待其他執行緒顯示的喚醒,否則不會被分配cpu時間片
限期等待
:無須等待其他執行緒顯示的喚醒,在一定時間之後會被系統自動喚醒
死亡
:可以是執行緒結束之後自己結束,或者產生了異常而結束
daemon當所有非守護執行緒結束時,程式也就終止,同時會殺死所有守護執行緒
sleep
thread.sleep(millsec)方法會休眠當前正在執行的執行緒,millsec單位是毫秒(==抱著鎖睡覺)
yield 禮讓
對靜態方法thread.yield()的呼叫宣告了當前執行緒已經完成了宣告週期最重要的部分,可以切換給其他執行緒來執行
join
一直阻塞當前執行緒直到目標執行緒執行完畢
start
啟動執行緒
new建立執行緒
wait notify() 和notifyall() (工作在同步**塊中-)3、await()、signal和singalall()使用
wait()
掛起期間,執行緒會釋放鎖。這是因為,如果沒有釋放鎖,那麼其他執行緒就無法進入物件 的同步方法或同步控制塊中,那麼就無法執行notify
或者notifyall
來喚醒掛起的執行緒,造成死鎖工作流程
wait和sleep的區別
class
data3
system.out.
println
(thread.
currentthread()
.getname()
+"=>aaaaaaa");
// 喚醒,喚醒指定的人,b
number =2;
condition2.
signal()
;}catch
(exception e)
finally
}public
void
printb()
system.out.
println
(thread.
currentthread()
.getname()
+"=>bbbbbbbbb");
// 喚醒,喚醒指定的人,c
number =3;
condition3.
signal()
;}catch
(exception e)
finally
}public
void
printc()
system.out.
println
(thread.
currentthread()
.getname()
+"=>bbbbbbbbb");
// 喚醒,喚醒指定的人,c
number =1;
condition1.
signal()
;}catch
(exception e)
finally
}}
執行緒互動的基礎知識
必須從同步環境內呼叫wait notify notifyall 方法。執行緒不能呼叫物件上的wait或notify的方法,除非它擁有那個物件的鎖。wait notify notifyall 都是object的例項方法。與每個物件具有鎖一樣,每個物件可以有乙個執行緒列表,他們等待來自該訊號 通知 執行...
執行緒的基礎知識梳理
程序 執行緒 執行緒的組成 多執行緒 需要繼承thread或者實現runnable 執行緒的建立 兩種方法的區別 class test extends thread public static void main string args 執行緒的命名 呼叫start 方法與直接呼叫run 方法的區別...
多執行緒基礎知識
建立乙個序列佇列,該佇列中從方的都是要依次執行的任務,dispatch queue serial 表示序列佇列的標示 dispatch queue t serialqueue dispatch queue create serial dispatch queue serial 建立乙個並行佇列,並行...