Java多執行緒中join的用法

2021-08-01 10:17:40 字數 1641 閱讀 3280

在很多情況下,主線程建立並啟動子執行緒,如果子執行緒中要進行大量的耗時計算,主線程會比子執行緒提前結束,如果主線程需要用到子執行緒返回的結果,就要用到join()方法了,這樣就將非同步的變為同步的了。

比如下面這個例子,如果不用join(),我們將無法控制執行流程

子執行緒隨機休眠時間

public class threada extends thread catch (interruptedexception e) 

system.out.println("子執行緒執行完了");

}}

public static void main(string args) throws interruptedexception

使用join()方法

public static void main(string args) throws interruptedexception

主線程會等待子執行緒執行完後再執行

join(long)方法中的引數表示,超過設定時間後就繼續執行主線程,不再等待子執行緒了,這一點和sleep(long)很相似,但是兩者是有區別的,join(long)內部是用wait(long)實現的,會釋放鎖,sleep(long)不釋放鎖;

join的原始碼:

public final synchronized void join(long millis)

throws interruptedexception

if (millis == 0)

} else

wait(delay); //這裡是用了wait(long),會釋放鎖

now = system.currenttimemillis() - base;}}

}

我們還可以通過join控制多個執行緒的執行順序

思路:例如有三個執行緒a b c,我們可以在c執行緒中啟動b執行緒,在b執行緒中啟動a執行緒,這樣,我們最先在主線程中啟動c執行緒後,c會等待b執行緒執行完,b執行緒又會等待a執行緒執行完,這樣產生的結果是a執行緒第乙個執行完,b次之,c最後

public class threadc extends thread 

public void run() catch (interruptedexception e)

system.out.println("執行緒c執行了");

}}

public class threadb extends thread 

public void run() catch (interruptedexception e)

system.out.println("執行緒b執行了");

}}

public class threada extends thread

}

public static void main(string args)

執行結果

執行緒a執行了

執行緒b執行了

執行緒c執行了

Java多執行緒 執行緒排程Join

public final void join throws interruptedexception 等待該執行緒終止。public final void join long millis throws interruptedexception 等待該執行緒終止的時間最長為 millis 毫秒。超時...

Java多執行緒 Join執行緒插隊

join 方法 waits for this thread to die.即 等待這個執行緒結束。1 程式中有兩個執行緒 執行緒a threada 執行緒b threadb 2 在 執行緒a 的run 方法中,呼叫了threadb.join 3 則 執行緒a 會在此段 出,暫停後續 的呼叫,等待 執...

Java多執行緒之join

1.join方法只有在繼承了thread類的執行緒中才有。2.執行緒必須要start 後再join才能起作用。將另外乙個執行緒join到當前執行緒,則需要等到join進來的執行緒執行完才會繼續執行當前執行緒。package thread.join class sleeper extends thre...