執行緒的基礎知識

2021-10-06 21:39:38 字數 2534 閱讀 7457

執行緒的狀態

執行緒的常用方法

自行建立執行緒池的七大引數 new threadpoolexecutor

執行wxecutorservices.execute(runnable command)

採用實現runnable、callable介面的方式建立執行緒

執行緒了只是實現了runnble介面或者callable介面,還可以繼承其他類。在這種方式下,多個執行緒可以共享同乙個target物件,所以非常適合多個相同執行緒來處理同乙份資源的情況,從而可以將cpu,**和資料分開。但是,缺點是程式設計稍微複雜,如果要訪問當前執行緒,則必須使用thread.currentthread

​ 2、使用繼承thread類的方式建立多執行緒

如果需要訪問當前執行緒,則無需使用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() (工作在同步**塊中-)

使用wait()掛起期間,執行緒會釋放鎖。這是因為,如果沒有釋放鎖,那麼其他執行緒就無法進入物件 的同步方法或同步控制塊中,那麼就無法執行notify或者notifyall來喚醒掛起的執行緒,造成死鎖

工作流程

wait和sleep的區別

3、await()、signal和singalall()

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 建立乙個並行佇列,並行...