執行緒基本方法

2021-10-04 13:52:44 字數 2156 閱讀 5222

執行緒相關的基本方法有wait,notify,notifyall,sleep,join,yield

等。執行緒等待(wait)

sleep 導致當前執行緒休眠,與 wait 方法不同的是 sleep 不會釋放當前占有的鎖,sleep(long)會導致 執行緒進入timed-wating狀態,而wait()方法會導致當前執行緒進入wating狀態

執行緒讓步(yield)

yield 會使當前執行緒讓出 cpu 執行時間片,與其他執行緒一起重新競爭 cpu 時間片。一般情況下, 優先順序高的執行緒有更大的可能性成功競爭得到 cpu 時間片,但這又不是絕對的,有的作業系統對 執行緒優先順序並不敏感。

執行緒中斷(interrupt)

中斷乙個執行緒,其本意是給這個執行緒乙個通知訊號,會影響這個執行緒內部的乙個中斷標識位。這 個執行緒本身並不會因此而改變狀態(如阻塞,終止等)。

呼叫 interrupt()方法並不會中斷乙個正在執行的執行緒。也就是說處於 running 狀態的線 程並不會因為被中斷而被終止,僅僅改變了內部維護的中斷標識位而已。

若呼叫 sleep()而使執行緒處於 timed-wating 狀態,這時呼叫 interrupt()方法,會丟擲 interruptedexception,從而使執行緒提前結束timed-wating狀態。

許多宣告丟擲interruptedexception的方法(如thread.sleep(long mills方法)),丟擲異 常前,都會清除中斷標識位,所以丟擲異常後,呼叫 isinterrupted()方法將會返回 false。

join等待其他執行緒終止

join() 方法,等待其他執行緒終止,在當前執行緒中呼叫乙個執行緒的 join() 方法,則當前執行緒轉為阻塞 狀態,回到另乙個執行緒結束,當前執行緒再由阻塞狀態變為就緒狀態,等待 cpu 的寵幸。

為什麼要用 join() 方法

很多情況下,主線程生成並啟動了子執行緒,需要用到子執行緒返回的結果,也就是需要主線程需要 在子執行緒結束後再結束,這時候就要用到 join() 方法。

system.out.

println

(thread.

currentthread()

.getname()

+"執行緒執行開始!"

);

thread6 thread1 =

newthread6()

;

thread1.

setname

("執行緒b"

);

thread1.

join()

; system.out.

println

("這時 thread1執行完畢之後才能執行主線程"

);

執行緒喚醒(notify)

object 類中的 notify() 方法,喚醒在此物件監視器上等待的單個執行緒,如果所有執行緒都在此物件 上等待,則會選擇喚醒其中乙個執行緒,選擇是任意的,並在對實現做出決定時發生,執行緒通過調 用其中乙個 wait() 方法,在物件的監視器上等待,直到當前的執行緒放棄此物件上的鎖定,才能繼 續執行被喚醒的執行緒,被喚醒的執行緒將以常規方式與在該物件上主動同步的其他所有執行緒進行競 爭。類似的方法還有 notifyall() ,喚醒再次監視器上等待的所有執行緒。

其他方法

sleep():強迫乙個執行緒睡眠n毫秒。

isalive(): 判斷乙個執行緒是否存活。

join(): 等待執行緒終止。

activecount(): 程式中活躍的執行緒數。

enumerate(): 列舉程式中的執行緒。

.currentthread(): 得到當前執行緒。

isdaemon(): 乙個執行緒是否為守護執行緒。

setdaemon(): 設定乙個執行緒為守護執行緒。(使用者執行緒和守護執行緒的區別在於,是否等待主線 程依賴於主線程結束而結束)

setname(): 為執行緒設定乙個名稱。

wait(): 強迫乙個執行緒等待。

notify(): 通知乙個執行緒繼續執行。

setpriority(): 設定乙個執行緒的優先順序。

getpriority()::獲得乙個執行緒的優先順序。

執行緒 基本方法

執行緒相關的基本方法有 wait,notify,notifyall,sleep,join,yield 等。執行緒等待 wait 呼叫該方法的執行緒進入 waiting 狀態,只有等待另外執行緒的通知或被中斷才會返回,需要注意的 是呼叫 wait 方法後,會釋放物件的鎖。因此,wait 方法一般用在同...

執行緒的基本方法

程序 資源分配的基本單位 執行緒 資源排程的基本單位 為了程序能進行併發操作 建立程序有兩種方法 一般推薦第二種,因為單繼承問題 先來看看執行緒的建構函式 2.1 繼承thread類,重寫run public class threadtest extends thread 重寫方法 public v...

執行緒狀態及基本方法

虛擬機器實際呼叫的方法 設定該執行緒為守護執行緒,守護執行緒是一種特殊的執行緒,主要是為其他執行緒提供服務.被守護的執行緒一旦銷毀,那麼守護執行緒也沒有存在的必要了.示例1 innerthread設定為thread的守護執行緒,模擬心跳傳送.如果連線中斷,則心跳中斷.public class dea...