Thread类中有一个join()方法,此方法表示,在当前线程中a中,b线程调用join()方法,那么,a线程就会释放资源,让给b线程先执行。
举例1:主线程main让子线程先进行执行
package com.cvicse.thread.demo;
public class ThreadDemo4 {
public static void main(String[] args){
Thread thread =new Thread(new Runnable() {
@Override
public void run() {
//需要线程执行的代码
for(int i = 0; i< 60 ; i++) {
System.out.println("A i = :" + i );
}
}
},"A");
thread.start();
try {
//主线程让子线程先执行完毕
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
for(int i = 0; i< 20 ; i++) {
System.out.println("主线程 i = :" + i );
}
}
}
举例2:现有T1,T2,T3三个线程,怎么样保证T2在T1执行完毕后执行,T3在T2执行完毕后执行。
package com.cvicse.thread.demo;
public class ThreadDemo5 {
/**
* 现有T1,T2,T3三个线程,怎么样保证T2在T1执行完毕后执行,T3在T2执行完毕后执行。
*/
public static void main(String[] args) throws InterruptedException {
Thread t1 =new Thread(new Runnable() {
@Override
public void run() {
//需要线程执行的代码
for(int i = 0; i< 60 ; i++) {
System.out.println("T1 i = :" + i );
}
}
},"T1");
Thread t2 =new Thread(new Runnable() {
@Override
public void run() {
try {
t1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//需要线程执行的代码
for(int i = 0; i< 60 ; i++) {
System.out.println("T2 i = :" + i );
}
}
},"T2");
Thread t3 =new Thread(new Runnable() {
@Override
public void run() {
try {
t2.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//需要线程执行的代码
for(int i = 0; i< 60 ; i++) {
System.out.println("T3 i = :" + i );
}
}
},"T3");
t1.start();
t2.start();
t3.start();
}
}