1. 程式人生 > >多執行緒--Thread.join方法

多執行緒--Thread.join方法

在Thread類的Api中,Join的作用是讓當前執行緒等待目標執行緒結束之後才繼續執行。

分別是

 
 
 
public final synchronized void join(long millis, int nanos); //使當前執行緒等待目標執行緒millis 毫秒 ,nanos納秒之後,當前執行緒繼續執行。
 
 
 
public final synchronized void join(long millis); //使當前執行緒等待目標執行緒millis 毫秒,當前執行緒繼續執行。
 
 
 
public final void join(); //使當前執行緒時刻檢測目標執行緒,直到目標執行緒執行完成,再執行當前執行緒。
 

 

下面我們主要檢視下 public final synchronized void join(long millis) 的原始碼:

    public final synchronized void join(long millis)
    throws InterruptedException {
        long base = System.currentTimeMillis();
        long now = 0;

        if (millis < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        
if (millis == 0) {
      //如果等待的毫秒數為0,則通過Api, isAlive()時刻檢測目標執行緒是否存活,若存活則繼續等待。
while (isAlive()) { wait(0); } } else { while (isAlive()) {
        //判斷目標執行緒是否存活,若存活,則等待mills毫秒,然後跳出join,當前執行緒執行。
long delay = millis - now;
if (delay <= 0) { break; } wait(delay); now = System.currentTimeMillis() - base; } } }

從原始碼可以看出,就是當前執行緒在判斷目標執行緒是否存活,如果存活根據引數的值,是無限等待到目標執行緒結束才執行當前執行緒,還是執行一段時間就開始執行當前執行緒。

public final void join();底層呼叫Join(0);實現無限等待知道目標執行緒結束。