1. 程式人生 > >執行緒(九)join方法的簡單介紹:

執行緒(九)join方法的簡單介紹:

1、join方法的實現原理:

join方法原理就是利用執行緒的wait方法等待操作:

A執行緒中呼叫了B執行緒的join方法,則相當於在A執行緒中呼叫了B執行緒的wait方法,當B執行緒執行完(或者到達等待時間),B執行緒會自動呼叫自身的notifyAll方法喚醒A執行緒

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) {
      while (isAlive()) {
          wait(0);
      }
  } else {
      while (isAlive()) {
           long delay = millis - now;
           if (delay <= 0) {
              break;
           }
           wait(delay);
           now = System.currentTimeMillis() - base;
       }
  }
}

2、例項:

package join方法;

public class JoinTest {
	public static void main(String[] args) throws InterruptedException {
		ThreadJoinTest t1 = new ThreadJoinTest("111");
		ThreadJoinTest t2 = new ThreadJoinTest("222");
		t1.start();
		t1.join(); //加入join後,只有在執行緒t1執行完,t2執行緒才執行(join(10) 其中10秒代表延時時間)
		t2.start();		
	}
}
	
class ThreadJoinTest extends Thread {
	public ThreadJoinTest(String name) {
			super(name);
	}
		
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
				System.out.println(this.getName() + ":" + i);
		}
	}
}

join的意思是使得放棄當前執行緒的執行,並返回對應的執行緒,例如下面程式碼的意思就是: 程式在main執行緒中呼叫t1執行緒的join方法,則main執行緒放棄cpu控制權,並返回t1執行緒繼續執行直到執行緒t1執行完畢 所以結果是t1執行緒執行完後,才到主執行緒執行,相當於在main執行緒中同步t1執行緒,t1執行完了