对于join了解,非常浅薄,今天又看到相似的代码,因此动手实践Thread.Join的真正作用。
通过三个类加深对Join的了解。
Thread1.java
package com.port.test;
public class Thread1 extends Thread{
public Thread1(){
super("Thread1");
}
public void run(){
String threadname = Thread.currentThread().getName();
for(int i = 0; i < 10; i++){
System.out.println(threadname + ":" + i);
}
}
}
Thread2.java
package com.port.test;
public class Thread2 extends Thread{
public Thread2(){
super("Thread2");
}
public void run(){
String threadname = Thread.currentThread().getName();
for(int i = 0; i < 10; i++){
System.out.println(threadname + ":" + i);
}
}
}
TestThread.java
代码中没有使用join()
package com.port.test;
public class TestThread {
public static void main(String[] args) throws InterruptedException{
String name = Thread.currentThread().getName();
System.out.println(name + " " + "start.");
Thread1 t1 = new Thread1();
t1.start();
// t1.join();
Thread2 t2 = new Thread2();
t2.start();
// t2.join();
System.out.println(name + " " + "end!");
}
}
结果:
主线程先执行完毕,然后子线程继续执行。
代码中添加join()函数。
package com.port.test;
public class TestThread {
public static void main(String[] args) throws InterruptedException{
String name = Thread.currentThread().getName();
System.out.println(name + " " + "start.");
Thread1 t1 = new Thread1();
Thread2 t2 = new Thread2();
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(name + " " + "end!");
}
}
主线程会等待子线程执行完毕后,主线程继续执行