Thread类的方法,不带参数 public final void join()
作用:等待调用该方法的线程结束后才能执行,是一种抢占资源的方式。
没有使用join方法:
package java_thread;
class MyThread2 extends Thread{
public void run(){
System.out.println(getName() + "正在执行!");
}
}
public class JoinDemo {
public static void main(String[] args) {
MyThread2 mt = new MyThread2();
System.out.println("主线程运行结束!");
}
}
执行多次发现都是主线程先执行:
主线程运行结束! Thread-0正在执行!
使用join方法:
public static void main(String[] args) {
MyThread2 mt = new MyThread2();
mt.start();
try {
mt.join();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("主线程运行结束!");
}
输出:
Thread-0正在执行! 主线程运行结束!
主线程后执行了。
加入循环语句:
package java_thread;
class MyThread2 extends Thread{
public void run(){
for(int i=0; i <10; i++){
System.out.println(getName() + "正在执行第" + i + "次");
}
}
}
public class JoinDemo {
public static void main(String[] args) {
MyThread2 mt = new MyThread2();
mt.start();
try {
mt.join();
} catch (Exception e) {
e.printStackTrace();
}
for(int j=0; j<15; j++){
System.out.println("主线程正在执行第" + j + "次");
}
System.out.println("主线程运行结束!");
}
}
输出发现也是线程0先执行完10次,主线程再执行:
Thread-0正在执行第0次 Thread-0正在执行第1次 Thread-0正在执行第2次 Thread-0正在执行第3次 Thread-0正在执行第4次 Thread-0正在执行第5次 Thread-0正在执行第6次 Thread-0正在执行第7次 Thread-0正在执行第8次 Thread-0正在执行第9次 主线程正在执行第0次 主线程正在执行第1次 主线程正在执行第2次 主线程正在执行第3次 主线程正在执行第4次 主线程正在执行第5次 主线程正在执行第6次 主线程正在执行第7次 主线程正在执行第8次 主线程正在执行第9次 主线程正在执行第10次 主线程正在执行第11次 主线程正在执行第12次 主线程正在执行第13次 主线程正在执行第14次 主线程运行结束!
若不使用join方法,会发现线程0和主线程随机执行。
还有一种是join带参方法:public final void join(long millis)
作用:等待该线程终止的最长时间为millis毫秒
代码如下:
package java_thread;
class MyThread2 extends Thread{
public void run(){
for(int i=0; i<300; i++){
System.out.println(getName() + "正在执行第" + i + "次");
}
}
}
public class JoinDemo {
public static void main(String[] args) {
MyThread2 mt = new MyThread2();
mt.start();
try {
mt.join(1);
} catch (Exception e) {
e.printStackTrace();
}
for(int j=0; j<15; j++){
System.out.println("主线程正在执行第" + j + "次");
}
System.out.println("主线程运行结束!");
}
}
输出:
Thread-0正在执行第0次 Thread-0正在执行第1次 Thread-0正在执行第2次 Thread-0正在执行第3次 Thread-0正在执行第4次 Thread-0正在执行第5次 Thread-0正在执行第6次 Thread-0正在执行第7次 Thread-0正在执行第8次 主线程正在执行第0次 主线程正在执行第1次 主线程正在执行第2次 主线程正在执行第3次 主线程正在执行第4次 主线程正在执行第5次 主线程正在执行第6次 主线程正在执行第7次 主线程正在执行第8次 主线程正在执行第9次 Thread-0正在执行第9次 主线程正在执行第10次 Thread-0正在执行第10次 主线程正在执行第11次 Thread-0正在执行第11次 Thread-0正在执行第12次 主线程正在执行第12次 Thread-0正在执行第13次 主线程正在执行第13次 Thread-0正在执行第14次 主线程正在执行第14次 Thread-0正在执行第15次 主线程运行结束! Thread-0正在执行第16次 Thread-0正在执行第17次 Thread-0正在执行第18次 Thread-0正在执行第19次 Thread-0正在执行第20次 Thread-0正在执行第21次 Thread-0正在执行第22次 Thread-0正在执行第23次 Thread-0正在执行第24次 Thread-0正在执行第25次 Thread-0正在执行第26次 Thread-0正在执行第27次 Thread-0正在执行第28次 Thread-0正在执行第29次 Thread-0正在执行第30次 Thread-0正在执行第31次 Thread-0正在执行第32次 Thread-0正在执行第33次 Thread-0正在执行第34次 Thread-0正在执行第35次 Thread-0正在执行第36次 Thread-0正在执行第37次 Thread-0正在执行第38次 Thread-0正在执行第39次 Thread-0正在执行第40次 Thread-0正在执行第41次 Thread-0正在执行第42次 Thread-0正在执行第43次 Thread-0正在执行第44次 Thread-0正在执行第45次 Thread-0正在执行第46次 Thread-0正在执行第47次 Thread-0正在执行第48次 Thread-0正在执行第49次 Thread-0正在执行第50次 Thread-0正在执行第51次 Thread-0正在执行第52次 Thread-0正在执行第53次 Thread-0正在执行第54次 Thread-0正在执行第55次 Thread-0正在执行第56次 Thread-0正在执行第57次 Thread-0正在执行第58次 Thread-0正在执行第59次 Thread-0正在执行第60次 Thread-0正在执行第61次 Thread-0正在执行第62次 Thread-0正在执行第63次 Thread-0正在执行第64次 Thread-0正在执行第65次 Thread-0正在执行第66次 Thread-0正在执行第67次 Thread-0正在执行第68次 Thread-0正在执行第69次 Thread-0正在执行第70次 Thread-0正在执行第71次 Thread-0正在执行第72次 Thread-0正在执行第73次 Thread-0正在执行第74次 Thread-0正在执行第75次 Thread-0正在执行第76次 Thread-0正在执行第77次 Thread-0正在执行第78次 Thread-0正在执行第79次 Thread-0正在执行第80次 Thread-0正在执行第81次 Thread-0正在执行第82次 Thread-0正在执行第83次 Thread-0正在执行第84次 Thread-0正在执行第85次 Thread-0正在执行第86次 Thread-0正在执行第87次 Thread-0正在执行第88次 Thread-0正在执行第89次 Thread-0正在执行第90次 Thread-0正在执行第91次 Thread-0正在执行第92次 Thread-0正在执行第93次 Thread-0正在执行第94次 Thread-0正在执行第95次 Thread-0正在执行第96次 Thread-0正在执行第97次 Thread-0正在执行第98次 Thread-0正在执行第99次



