package day04;
/**
* 使用两个线程模拟图片下载过程,详细要求如下:
* 1、创建线程t1,该线程模拟实现图片下载的过程,即在该线程中实现输出字符串"t1线程:正在下载图片:"+下载的百分数,例如:
* "t1线程:正在下载图片:40%",到100%之后,显示"t1:图片下载完成".
* 2、创建线程t2,在该线程中,首先输出"t2:等待图片下载完毕";然后将t1线程作为t2线程的子线程;最后,输出"t2:显示图片".
* 3、启动线程t1,t2;
* 4、要求,一定是线程t1执行完毕之后,才会执行线程t2中的显示图片。即显示了“t1:图片下载完成”之后,才会显示“t2:显示图片”。
* @author Administrator
*
*/
public class TestJoin {
public static void main(String[] args) {
final Thread t1=new Thread(){
public void run(){
for(int i=0;i<=10;i++){
System.out.println("t1线程:正在下载图片:"+i*10+"%");
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
}
System.out.println("t1:图片下载完成");
}
};
Thread t2=new Thread(){
public void run(){
System.out.println("t2:等待图片下载完毕");
try{
t1.join();//使用了join()方法,让t1子线程加入进来。t2主线程主动让出cpu,等待t1线程执行结束,在执行t2线程。
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("t2:显示图片");
}
};
t1.start();
t2.start();
}
}
运行结果:
t1线程:正在下载图片:0%
t2:等待图片下载完毕
t1线程:正在下载图片:10%
t1线程:正在下载图片:20%
t1线程:正在下载图片:30%
t1线程:正在下载图片:40%
t1线程:正在下载图片:50%
t1线程:正在下载图片:60%
t1线程:正在下载图片:70%
t1线程:正在下载图片:80%
t1线程:正在下载图片:90%
t1线程:正在下载图片:100%
t1:图片下载完成
t2:显示图片
运行结果是控制台先输出了“t2:等待图片下载完毕”,也输出了“t1线程:正在下载图片:0%”,以及“t1线程:正在下载图片:20%”等信息。最后,直到输出“t1:图片下载完成”后,才会输出“t2:显示图片”。
这是因为使用了join方法,该方法在此用于等待t1线程执行结束,在执行t2线程。