线程(九)join方法的简单介绍:

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014252478/article/details/83541148

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执行完了

猜你喜欢

转载自blog.csdn.net/u014252478/article/details/83541148