今天我们主要来学习线程合并(join); 为什么要合并呢?如果一个线程长期占用Cpu一直不肯释放,如果这个时候我们又想执行另外一个线程,我们可以要执行的线程合并到当前的线程。ps:线程A 一直占用Cpu,这里需要执行B线程,我们可以调用 B.join, 把B线程合并到A线程中执行,如果A在执行期间联合B线程,那么线程A将立刻中断执行,一直等到线程B执行完毕。
package javaThread;
public class JoinThread {
public static void main(String[] args) {
System.out.println(" main name begint" );
Thread t = new MyThread("test 11");
t.start();
MyThread t2 = new MyThread(" test 22",t);
t2.start();
try {
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(" main name end" );
}
static class MyThread extends Thread {
private String mName;
private Thread mThread;
public MyThread(String name) {
mName = name;
}
public MyThread(String name,Thread thread) {
mName = name;
mThread = thread;
}
@Override
public void run() {
super.run();
System.out.println(" start run " + mName);
try {
if(mThread != null) {
mThread.join();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
int i = 0;
while (i<2000) {
System.out.println(" start run " + mName + " " + i);
i++;
}
}
}
}
我们来看上面的例子,主线程被t2合并,所以主线程要等待t2执行完,而t2又被t1 合并 ,所以t2也要等待t1执行完。所以输出如下:
main name begint
start run test 22
start run test 11
start run test 11 0
start run test 11 1
start run test 11 2
start run test 11 3
start run test 11 4
............
start run test 22 0
start run test 22 1
start run test 22 2
start run test 22 3
start run test 22 4
start run test 22 5
.............
start
main name end