当前线程邀请调用方法的线程优先执行,在调用方法的线程执行结束之前,当前线程不能再次执行。线程A在运行期间,可以调用线程B的join()方法,让线程B和线程A联合。这样,线程A就必须等待线程B执行完毕后,才能继续执行。
join方法的使用
join()方法就是指调用该方法的线程在执行完run()方法后,在执行join方法后面的代码,即将两个线程合并,用于实现同步控制。
class A implements Runnable {private Thread b;public A(Thread b){this.b = b;}@Overridepublic void run(){for(int i=0;i<10;i++){System.out.println(Thread.currentThread().getName()+" A "+i);if(i == 5){try{this.b.join();}catch(InterruptedException e){e.printStackTrace();}}try{Thread.sleep(1000);}catch(InterruptedException e){e.printStackTrace();}}}
}class B implements Runnable {@Overridepublic void run(){for(int i=0;i<20;i++){System.out.println(Thread.currentThread().getName()+" B "+i);try{Thread.sleep(1000);}catch(InterruptedException e){e.printStackTrace();}}}
}public class TestJoinThread {public static void main(String[] args){Thread t1 = new Thread(new B());Thread t = new Thread(new A(t1));t.start();t1.start();for(int i=0;i<10;i++){System.out.println(Thread.currentThread().getName()+" "+i);if(i == 2){try{t.join();}catch(InterruptedException e){e.printStackTrace();}}try{Thread.sleep(1000);}catch(InterruptedException e){e.printStackTrace();}}}
}