在线程中有一个方法为join,join内部实现为wait;其实就是等待该线程执行的意思;
当有两个线程执行时,B线程执行前调用了A线程的join方法后,那么B线程必须在A线程执行完毕才开始执行;
举个雷子:
public static class ThreadA extends Thread {
@Override
public void run() {
super.run();
System.out.println("我是线程 A");
}
}
public static class ThreadB extends Thread {
Thread thread;
public ThreadB(Thread thread) {
this.thread = thread;
}
@Override
public void run() {
super.run();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("我是线程 B");
}
}
public static void main(String[] agrs) {
ThreadA threadA = new ThreadA();
ThreadB threadB = new ThreadB(threadA);
threadA.start();
threadB.start();
System.out.println("我是主线程");
}
线程B中调用了线程A的join方法,那么线程B是在线程A执行完毕后才会执行的,在B执行前主线程会直接执行,看结果:
我是主线程
我是线程 A
我是线程 B
同理,主线程执行前要在线程B执行后再执行的话,则在主线程前调用B线程的join方法即可:
public static void main(String[] agrs) {
ThreadA threadA = new ThreadA();
ThreadB threadB = new ThreadB(threadA);
threadB.start();
threadA.start();
try {
threadB.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("我是主线程");
}
输出结果为:
我是线程 A
我是线程 B
我是主线程
网友评论