Join方法:T3先执行,调用t2.join,让T2执行完后再执行T3.
在T2的run方法中,调用t1.join(),让T1执行完后再让T2执行。
public class JoinTest{
public static void main(String[] args){
final Thread t1 = new Thread(new Runnable(){
public void run(){
System.out.println("t1");
}
});
final Thread t2 = new Thread(new Runnable(){
public run(){
try{
//引用t1线程,等待t1线程执行完
t1.join();
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("t2");
}
});
Thread t3 = new Thread(new Runnable(){
public void run(){
try{
t2.join();
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("t3");
}
});
t3.start();
t2.start();
t1.start();
}
}
newSingleThreadExecutor 这个线程池,保证线程里面的任务依次执行
public class TestJoin {
public static void main(String[] args) throws InterruptedException {
final Thread t1 = new Thread(new Runnable() {
public void run() {
System.out.println(Thread.currentThread().getName() + " run 1");
}
}, "T1");
final Thread t2 = new Thread(new Runnable() {
public void run() {
System.out.println(Thread.currentThread().getName() + " run 2");
try {
t1.join(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "T2");
final Thread t3 = new Thread(new Runnable() {
public void run() {
System.out.println(Thread.currentThread().getName() + " run 3");
try {
t2.join(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "T3");
// method1
//t1.start();
//t2.start();
//t3.start();
// method 2 使用 单个任务的线程池来实现。保证线程的依次执行
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(t1);
executor.submit(t2);
executor.submit(t3);
executor.shutdown();
}
}