Thread中的join()方法用来让调用线程等待当前线程执行完毕再执行
测试代码:
情景一:不调用join()
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(){
@Override
public void run() {
for(int i = 1 ; i <= 100 ; i++){
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
};
Thread t2 = new Thread(){
@Override
public void run() {
for(int i = 1 ; i <= 100 ; i++){
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
};
Thread t3 = new Thread(){
@Override
public void run() {
for(int i = 1 ; i <= 100 ; i++){
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
};
t1.start();
t2.start();
t3.start();
//输出main线程的名字
System.out.println(Thread.currentThread().getName());
}
测试结果:首先输出了main线程的名字,然后依次输出t1、t2、t3的输出内容。
情景二:调用join()使main线程等待
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(){
@Override
public void run() {
for(int i = 1 ; i <= 100 ; i++){
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
};
Thread t2 = new Thread(){
@Override
public void run() {
for(int i = 1 ; i <= 100 ; i++){
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
};
Thread t3 = new Thread(){
@Override
public void run() {
for(int i = 1 ; i <= 100 ; i++){
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
};
t1.start();
t2.start();
t3.start();
t1.join();
t2.join();
t3.join();
//输出main线程的名字
System.out.println(Thread.currentThread().getName());
}
调用t1、t2、t3都调用join()后,t1、t2、t3会并发执行,但是main线程会一直处于阻塞状态等待t1、t2、t3线程执行完毕后再执行。
版权声明:本文为Peacock__原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。