C 執行緒類Thread初步

2021-04-14 00:39:48 字數 3656 閱讀 3309

.net

基礎類庫的

system.threading

命名空間提供了大量的類和介面支援多執行緒。這個命名空間有很多的類。system.threading.thread

類是建立並控制線程,設定其優先順序並獲取其狀態最為常用的類。他有很多的方法,在這裡我們將就比較常用和重要的方法做一下介紹:

thread.start

():啟動執行緒的執行;

thread.suspend

():掛起執行緒,或者如果執行緒已掛起,則不起作用;

thread.resume

():繼續已掛起的執行緒;

thread.interrupt

():中止處於

wait

或者sleep

或者join

執行緒狀態的執行緒;

thread.join

():阻塞呼叫執行緒,直到某個執行緒終止時為止

thread.sleep

():將當前執行緒阻塞指定的毫秒數;

thread.abort

():以開始終止此執行緒的過程。如果執行緒已經在終止,則不能通過

thread.start

()來啟動執行緒。

通過呼叫

thread.sleep

,thread.suspend

或者thread.join

可以暫停

/阻塞執行緒。呼叫

sleep()

和suspend()

方法意味著執行緒將不再得到

cpu時間。這兩種暫停執行緒的方法是有區別的,

sleep()

使得執行緒立即停止執行,但是在呼叫

suspend()

方法之前,公共語言執行時必須到達乙個安全點。乙個執行緒不能對另外乙個執行緒呼叫

sleep()

方法,但是可以呼叫

suspend()

方法使得另外乙個執行緒暫停執行。對已經掛起的執行緒呼叫

thread.resume

()方法會使其繼續執行。不管使用多少次

suspend()

方法來阻塞乙個執行緒,只需一次呼叫

resume()

方法就可以使得執行緒繼續執行。已經終止的和還沒有開始執行的執行緒都不能使用掛起。

thread.sleep

(int x

)使執行緒阻塞

x毫秒。只有當該執行緒是被其他的執行緒通過呼叫

thread.interrupt

()或者

thread.abort

()方法,才能被喚醒。如果對處於阻塞狀態的執行緒呼叫

thread.interrupt

()方法將使執行緒狀態改變,但是會丟擲

threadinterupptedexception

異常,你可以捕獲這個異常並且做出處理,也可以忽略這個異常而讓執行時終止執行緒。在一定的等待時間之內,

thread.interrupt

()和thread.abort

()都可以立即喚醒乙個執行緒。

我們可以通過使用

thread.abort

()方法來永久銷毀乙個執行緒,而且將丟擲

threadabortexception

異常。使終結的執行緒可以捕獲到異常但是很難控制恢復,僅有的辦法是呼叫

thread.resetabort

()來取消剛才的呼叫,而且只有當這個異常是由於被呼叫執行緒引起的異常。對於a和b兩個執行緒,

a執行緒可以正確的使用

thread.abort

()方法作用於

b執行緒,但是

b執行緒卻不能呼叫

thread.resetabort

()來取消

thread.abort

()操作。

thread.abort

()方法使得系統悄悄的銷毀了執行緒而且不通知使用者。一旦實施

thread.abort

()操作,該執行緒不能被重新啟動。呼叫了這個方法並不是意味著執行緒立即銷毀,因此為了確定執行緒是否被銷毀,我們可以呼叫

thread.join

()來確定其銷毀,

thread.join

()是乙個阻塞呼叫,直到執行緒的確是終止了才返回。但是有可能乙個執行緒呼叫

thread.interrupt

()方法來中止另外乙個執行緒,而這個執行緒正在等待

thread.join

()呼叫的返回。

盡可能的不要用

suspend()

方法來掛起阻塞執行緒,因為這樣很容易造成死鎖。假設你掛起了乙個執行緒,而這個執行緒的資源是其他執行緒所需要的,會發生什麼後果。因此,我們盡可能的給重要性不同的執行緒以不同的優先順序,用

thread.priority

()方法來代替使用

thread.suspend

()方法。

thread

類有很多的屬性,這些重要的屬性是我們多執行緒程式設計必須得掌握的。

thread.isalive

屬性:獲取乙個值,該值指示當前執行緒的執行狀態。如果此執行緒已啟動並且尚未正常終止或中止,則為

true

;否則為

false

。thread.name

屬性:獲取或設定執行緒的名稱。

thread.priority

屬性:獲取或設定乙個值,該值指示執行緒的排程優先順序。

thread.threadstate

屬性:獲取乙個值,該值包含當前執行緒的狀態。

thread狀態

system.threading.thread.threadstate屬性定義了執行時執行緒的狀態。執行緒從建立到執行緒終止,它一定處於其中某乙個狀態。當執行緒被建立時,它處在unstarted狀態,thread類的start() 方法將使執行緒狀態變為running狀態,執行緒將一直處於這樣的狀態,除非我們呼叫了相應的方法使其掛起、阻塞、銷毀或者自然終止。如果執行緒被掛起,它將處於suspended狀態,除非我們呼叫resume()方法使其重新執行,這時候執行緒將重新變為running狀態。一旦執行緒被銷毀或者終止,執行緒處於stopped狀態。處於這個狀態的執行緒將不復存在,正如執行緒開始啟動,執行緒將不可能回到unstarted狀態。執行緒還有乙個background狀態,它表明執行緒執行在前台還是後台。在乙個確定的時間,執行緒可能處於多個狀態。據例子來說,乙個執行緒被呼叫了sleep而處於阻塞,而接著另外乙個執行緒呼叫abort方法於這個阻塞的執行緒,這時候執行緒將同時處於waitsleepjoin和abortrequested狀態。一旦執行緒響應轉為sle阻塞或者中止,當銷毀時會丟擲threadabortexception異常。

執行緒優先順序

system.threading.thread.priority列舉了執行緒的優先級別,從而決定了執行緒能夠得到多少cpu時間。高優先順序的執行緒通常會比一般優先順序的執行緒得到更多的cpu時間,如果不止乙個高優先順序的執行緒,作業系統將在這些執行緒之間迴圈分配cpu時間。低優先順序的執行緒得到的cpu時間相對較少,當這裡沒有高優先順序的執行緒,作業系統將挑選下乙個低優先順序 的執行緒執行。一旦低優先順序的執行緒在執行時遇到了高優先順序的執行緒,它將讓出cpu給高優先順序的執行緒。新建立的執行緒優先順序為一般優先順序,我們可以設定執行緒的優先順序別的值,如下面所示:

highest

abovenormal

normal

belownormal

lowest

C 執行緒類Thread初步

net 基礎類庫的 system.threading 命名空間提供了大量的類和介面支援多執行緒。這個命名空間有很多的類。system.threading.thread 類是建立並控制線程,設定其優先順序並獲取其狀態最為常用的類。他有很多的方法,在這裡我們將就比較常用和重要的方法做一下介紹 threa...

C 執行緒類Thread初步

net 基礎類庫的system.threading命名空間提供了大量的類和介面支援多執行緒。這個命名空間有很多的類。system.threading.thread類是建立並控制線程,設定其優先順序並獲取其狀態最為常用的類。他有很多的方法,在這裡我們將就比較常用和重要的方法做一下介紹 thread.s...

C 執行緒類Thread初步

net 基礎類庫的 system.threading 命名空間提供了大量的類和介面支援多執行緒。這個命名空間有很多的類。system.threading.thread 類是建立並控制線程,設定其優先順序並獲取其狀態最為常用的類。他有很多的方法,在這裡我們將就比較常用和重要的方法做一下介紹 threa...