/*
* 线程的同步运行
* 线程提供了一个方法:join,允许调用该方法的线程进入阻塞。
* 直到该方法所属线程结束可结束后方可解除阻塞执行后续代码。
*
* 线程运行
* 同步运行:多个线程运行存在先后顺序。
* 异步运行:并发执行本身就是异步运行,各干各的。
*/
public class JoinDemo {
//表示图片是否下载完毕
public static boolean isFinish = false;
public static void main(String[] args) {
/*
* 一个方法的局部内部类中若引用这个方法的其他局部
* 变量时,该方法必须时final关键字,但是该变量
* 仍然时final的,局部内部类不可以对其二次赋值。
*/
// boolean isFinish = false;
Thread download = new Thread() {
public void run() {
System.out.println("down:开始下载图片...");
for(int i=1;i<=100;i++) {
System.out.println("down"+i+"%");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
}
}
System.out.println("down:下载完毕!");
isFinish = true;
}
};
Thread show = new Thread() {
public void run() {
System.out.println("show:开始显示文字...");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
System.out.println("show:显示文字完毕!");
System.out.println("show:开始显示图片...");
/*
* 要先等待downlad将图片下载完毕(download线程执行完毕)
*/
System.out.println("show:开始等待download工作完毕!");
try{
/*
* 当show线程调用join方法后就进入了阻塞状态
* 直到download线程执行完毕才会解除
*/
download.join();
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("show:等待解除!");
if(!isFinish) {
throw new RuntimeException("图片加载失败!");
}
System.out.println("show:显示图片完毕!");
}
};
download.start();
show.start();
}
}
线程的同步运行
最新推荐文章于 2024-02-22 16:34:18 发布