多线程中调用join()方法位置的不同,会导致运行顺序的不同。
@Override
public void run() {
int i = 0;
while (true){
String name = Thread.currentThread().getName();
System.out.println( name+"正在执行"+ i++);
if(i>5){
break;
}
}
}
//run实现
//main方法
public static void main(String[] args) throws InterruptedException {
TestThreadJoin10 join10 = new TestThreadJoin10();
Thread th1 = new Thread(join10,"普通人1");
Thread th2 = new Thread(join10,"普通人2");
Thread th3 = new Thread(join10,"vip");
//th3调用join,预期 vip全部打印完成之后,再执行其他的线程
th3.start();
th3.join();
th1.start();
th2.start();
}
控制台打印如下:
符合预期
把h3的位置移动
public static void main(String[] args) throws InterruptedException {
TestThreadJoin10 join10 = new TestThreadJoin10();
Thread th1 = new Thread(join10,"普通人1");
Thread th2 = new Thread(join10,"普通人2");
Thread th3 = new Thread(join10,"vip");
th1.start();
th2.start();
//移动调用的位置
th3.start();
th3.join();
}
控制台打印如下:并没有等待vip全部执行完成才执行下一个线程,而是交替执行了。
记录一下,不知道为什么会这样。