執行緒基礎2 sleep和join

2021-06-21 10:58:43 字數 1839 閱讀 4561

一、sleep(毫秒數)方法

1、sleep方法是乙個靜態方法。

public class threadtest extends thread catch (interruptedexception e) 

system.out.println("main執行緒被執行");

}public void run() catch (interruptedexception e)

system.out.println("threadtest執行緒被執行");

}}

輸出結果:

threadtest執行緒被執行

main執行緒被執行

如果將sleep(10000)改為thread.sleep(10000)

public class threadtest extends thread catch (interruptedexception e) 

system.out.println("main執行緒被執行");

}public void run() catch (interruptedexception e)

system.out.println("threadtest執行緒被執行");

}}

輸出結果:

threadtest執行緒被執行

main執行緒被執行

由以上可以看出,thread.sleep方法並不是休眠thread執行緒,而是休眠main執行緒。

sleep方法的執行不是取決於哪個執行緒通過「.」呼叫,而是在哪個執行緒中宣告,在main方法中宣告sleep或thread.sleep休眠的是main執行緒,其他執行緒物件一般在run()方法中呼叫其sleep使該執行緒休眠。

2、執行緒進入休眠狀態後,並沒有釋放所占用的cpu片段。

sleep方法讓乙個執行緒進入睡眠狀態,等待一定的時間之後,自動醒來進入到可執行狀態,不會馬上進入執行狀態,因為執行緒排程機制恢復執行緒的執行也需要時間。

3、sleep方法需捕獲interruptedexception異常。

執行緒在sleep過程中有可能被其他物件呼叫它的interrupt()方法,產生interruptedexception異常,如果

程式不捕獲這個異常,執行緒就會異常終止,進入terminated狀態;如果程式捕獲了這個異常,那麼程式就會繼續執catch語句塊(可能還有finally語句塊)以及以後的**。

二、join()方法

1、乙個執行緒呼叫join()方法,當前正在執行的執行緒被阻塞,直至呼叫join方法的執行緒執行完畢,當前執行緒才能繼續執行。

public class test  catch (interruptedexception e) 

system.out.println("a執行緒執行...");

}} public static void main(string args) catch (interruptedexception e)

system.out.println("main執行緒執行...");

}}

執行結果:
a執行緒執行...

main執行緒執行...

2、呼叫join()方法時可以帶乙個引數(join(long millis)join(long millis, int nanos)),目標執行緒在時間到期時,即使沒有結束,join() 方法也返回,被掛起的執行緒恢復執行

3、對join()方法的呼叫可以被中斷,做法是在呼叫執行緒上呼叫interrupt()方法,注意異常處理。



非同步執行緒學習筆記(二) Join和Sleep

在上一章學習過後,我們肯定希望能控制線程有序,join和sleep可以通過阻塞執行緒成達到這一目的,下面我們開始學習join和sleep方法。join方法 等待另乙個執行緒完成。示例如下 namespace joinandsleep private static void threadproc if...

Daemon執行緒和Join執行緒

daemon執行緒稱為守護執行緒 非常喜歡這個名字 執行緒一旦被設定為守護執行緒,當非守護執行緒結束,守護執行緒即使沒有執行完,也必須隨之全部結束。例如我們曾經玩兒過的坦克大戰,一旦守護的老巢完蛋了,其它守護坦克沒死也要結束。daemon執行緒的實質作用是為主執行緒其他執行緒的執行提供服務。user...

執行緒休眠sleep和wait

我們都知道,休眠執行緒有兩種方法,那就是sleep 和wait 先簡單了解一下這兩個方法 1.sleep 是thread裡的方法 static修飾,類名.呼叫即可 設定的時間一到,自動會醒過來繼續執行 2.wait 是object裡的方法 必須用notify或者notifyall來喚醒 在看黑馬程式...