java程序員修鍊之路線程篇九:join和sleep

Java程序員修鍊之路線程篇九:join和sleep

在多線程的交互過程中有這樣一種情況,線程ThreadA會啟動另外一個線程ThreadB,可能需要讓線程ThreadB執行一些諸如計算之類的操作,此時線程ThreadA需要等待線程ThreadB執行結束,並處理線程ThreadB結束后的結果,這個時候我們就需要使用join方法了。

線程類Thread提供了三種join方法,分別是join()方法、join(long millis)、join(long millis,int nanos)。其中join( )方法會一直等待,直到該線程終止。如果在join期間有任意線程中斷當前線程的時候會拋出InterruptedException異常,此時線程的中斷狀態也會被清除掉。另外兩個帶參數的join方法只是增加了時間上的限制。為了描述join的應用,我們看一個實例:

Advertisements

例子中主線程創建並調用了一個完成計算的線程對象thread,由於使用了join方法,主線程會一直等到線程對象thread對象執行結束才會列印出結果。創建線程時使用了lambda表達式,這是jdk1.8新增加的功能,將在後面的文章中跟大家講解。

在例子中我們還看到了sleep方法的應用,sleep方法會使線程睡眠,系統提供了兩個sleep方法分別是:sleep(long millis)和sleep(long millis,int nanos),參數millis是毫秒數,nanos則是納秒數。線程實際的睡眠時間取決於不同系統的定時器和調度器的精度。在sleep過程中,如果被別的線程中斷則會拋出InterruptedException異常,同時線程的中斷狀態會被清除掉。由於我們在前面的文章中已經大量使用了sleep方法,所以就不再舉例了。在下一篇文章中,我將給大家介紹線程組的概念,請大家持續關注。

Advertisements

Advertisements

你可能會喜歡