Join 方法:将某个子线程合并到主线程,即等子线程全部运行全部执行完之后才执行主线程.
例1 (不调用join,主线程与子线程同时运行)
-----
package com.wlh;
public class TestJoin {
public static void main(String[] args) {
MyThread2 t1 = new MyThread2("子线程");
t1.start();
/* try {
t1.join();
} catch (InterruptedException e) {}*/
for(int i=1;i<=10;i++){
try {
Thread.sleep(1000);//当前线程休息1000秒
System.out.println("i am main thread");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyThread2 extends Thread {
MyThread2(String s){
super(s);
}
public void run(){
for(int i =1;i<=10;i++){
System.out.println("i am "+getName());
try {
sleep(1000);//当前线程休息1000秒
} catch (InterruptedException e) {
return;
}
}
}
}
--------------------------------------------------------------
输出:
备注:子线程和主线程交替执行
i am 子线程
i am main thread
i am 子线程
i am main thread
i am 子线程
i am main thread
i am 子线程
i am main thread
i am 子线程
i am main thread
i am 子线程
i am main thread
i am 子线程
i am main thread
i am 子线程
i am main thread
i am 子线程
i am main thread
i am 子线程
i am main thread
-----------------------------------------------------------------
** 例子2 (调用 join 方法)
在 t1.start()子线程就绪;之后添加t1.join(),则等t1线程执行完之后才执行主线程
---------------
package com.wlh;
public class TestJoin {
public static void main(String[] args) {
MyThread2 t1 = new MyThread2("子线程");
t1.start();
try {
t1.join();
} catch (InterruptedException e) {}
for(int i=1;i<=10;i++){
try {
Thread.sleep(1000);//当前线程休息1000秒
System.out.println("i am main thread");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyThread2 extends Thread {
MyThread2(String s){
super(s);
}
public void run(){
for(int i =1;i<=10;i++){
System.out.println("i am "+getName());
try {
sleep(1000);//当前线程休息1000秒
} catch (InterruptedException e) {
return;
}
}
}
}
--------------------
输出结果:
i am 子线程
i am 子线程
i am 子线程
i am 子线程
i am 子线程
i am 子线程
i am 子线程
i am 子线程
i am 子线程
i am 子线程
i am main thread
i am main thread
i am main thread
i am main thread
i am main thread
i am main thread
i am main thread
i am main thread
i am main thread
i am main thread