public class TestJoin

{

public static void main(String[] args)

{

Thread t1 = new MyThread(“线程1”);

Thread t2 = new MyThread(“线程2”);

Thread t3 = new MyThread(“线程3”);

try
{
//t1先启动
t1.start();
t1.join();
//t2
t2.start();
t2.join();
//t3
t3.start();
t3.join();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}

}

class MyThread extend Thread{

public MyThread(String name){

setName(name);

}

@Override

public void run()

{

for (int i = 0; i < 5; i++)

{

System.out.println(Thread.currentThread().getName()+": "+i);

try

{

Thread.sleep(100);

}

catch (InterruptedException e)

{

e.printStackTrace();

}

}

}

}

还有一种方式,在t3开始前join t2,在t2开始前join t1

public class TestJoin2

{

public static void main(String[] args)

{

final Thread t1 = new Thread(new Runnable() {

@Override
public void run() {
System.out.println("t1");
}
});
final Thread t2 = new Thread(new Runnable() {

@Override
public void run() {
try {
//引用t1线程,等待t1线程执行完
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("t2");
}
});
Thread t3 = new Thread(new Runnable() {

@Override
public void run() {
try {
//引用t2线程,等待t2线程执行完
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("t3");
}
});
t3.start();
t2.start();
t1.start();
}

}


梅花香自古寒来