執行緒(九)join方法的簡單介紹:
阿新 • • 發佈:2018-12-18
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執行完了