join作用是让其他线程变为等待, t1.join();// 让其他线程变为等待,直到当前t1线程执行完毕,才释放。
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。
需求:
创建一个线程,子线程执行完毕后,主线程才能执行。
package demo1;
/**
*
* @author wx
*
*/
public class Thread005 {
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 60; i++) {
System.out.println("子线程,i" + i);
}
}
});
thread.start();
try {
// 其他线程变为等待状态,等thread线程执行完成后才能执行join方法
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < 30; i++) {
System.out.println("主线程,i" + i);
}
}
}
需求:
现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行
package demo1;
/**
*
* @author wx
*
*/
public class Thread006 {
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 30; i++) {
System.out.println("我是t1线程,i" + i);
}
}
});
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < 30; i++) {
System.out.println("我是t2线程,i" + i);
}
}
});
Thread thread3 = new Thread(new Runnable() {
@Override
public void run() {
try {
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < 30; i++) {
System.out.println("我是t3线程,i" + i);
}
}
});
thread.start();
thread2.start();
thread3.start();
}
}