Contents
20.3. 等待线程结束¶
join()方法,当前线程调用t1线程的join()方法,则阻塞当前线程,等待t1线程 结束,如果t1线程结束或等待超时,则当前线程回到就绪状态。
Thread类提供了多个版本的join(),它们定义如下:
void join():等待该线程结束。
void join(longmillis):等待该线程结束的时间最长为millis毫秒。如果超时为0意味着要一直等下去。
void join(long millis, intnanos):等待该线程结束的时间最长为millis毫秒加nanos纳秒。
Runner_wait.java
package com.a51work.cn;
/**
* 使用Runnable接口创建多线程
*/
//Thread类提供了setPriority(int newPriority)方法可以设置线程优先级,通过getPriority()方法获得线程优先级。
public class Runner_wait {
static int value = 0;
public static void main(String[] args) throws InterruptedException{
System.out.println("主线程...开始...");
// 创建线程t1,参数是一个线程执行对象Runner
Thread t1 = new Thread(() -> {
System.out.println("ThreadA 开始....");
for (int i = 0; i <2 ; i++) {
System.out.println("ThreadA 执行...。");
value++;
}
System.out.println("ThreadA 结束...");
},"ThreadA");
//开始线程t1
t1.start();
//主线程被阻塞,等待t1线程结束
t1.join();
System.out.println("value = " + value);
System.out.println("主线程 结束.....");
}
}
/*
主线程...开始...
ThreadA 开始....
ThreadA 执行...。
ThreadA 执行...。
ThreadA 结束...
value = 2
主线程 结束.....
* */
/*
将t1.join()语句注释掉,输出结果如下:
// t1.join();
主线程...开始...
value = 0
主线程 结束.....
ThreadA 开始....
ThreadA 执行...。
ThreadA 执行...。
ThreadA 结束...
* */