Join方法在JDK中的解释为:等待当前线程调用结束
代码示例:
package com.trs.thread;
/**
* join方法
* 允许当前线程在另一个线程上等待,进入阻塞状态,直到
* 另一个线程运行完毕,当前线程才会解除阻塞,继续执行。
* 通常用于协调两个线程同步工作使用
* @author xiayunan
* @date 2018年7月18日
*
*/
public class TestJoin2 {
//标示图片下载状态Q
public static boolean isFinish = false;
public static void main(String[] args) {
//下载图片的线程
final Thread download = new Thread(){
public void run(){
System.out.println("download:开始下载图片");
for(int i=1;i<=100;i++){
System.out.println("download:已完成"+i+"%");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
}
}
System.out.println("download:下载图片完毕!");
isFinish = true;
}
};
Thread show = new Thread(){
public void run(){
System.out.println("show:开始显示图片!");
/*
* 现在这里等待download将图片下载完毕!
*/
try {
/*
* 这里调用download.join()会使
* show线程进入阻塞状态,直到download
* 线程执行完毕才会解除。
*
* 当一个方法中的局部内部类中想引用当前方法的
* 其他局部变量,那么该变量必须被声明为final
* 的。JDK8.0后不再需要。
*/
download.join();
} catch (InterruptedException e) {
}
if(!isFinish){
throw new RuntimeException(
"图片没有下载完毕!");
}
System.out.println("show:显示图片完毕!");
}
};
download.start();
show.start();
}
}
运行结果: