多執行緒-join方法(主執行緒等待子執行緒執行完畢)
阿新 • • 發佈:2019-02-05
多執行緒中的join方法
join主要的作用就是讓主執行緒 等待 子執行緒 執行完畢之後,才讓主執行緒繼續執行。 話不多說,直接看程式碼例子就好。
父執行緒
package com.luoy.Thread.join;
public class FatherThread implements Runnable{
@Override
public void run(){
// TODO Auto-generated method stub
System.out.println("父執行緒:我只要執行1秒鐘。");
Thread son = new Thread( new SonThread());
son.start();
System.out.println("父執行緒:執行完畢。");
}
}
子執行緒
package com.luoy.Thread.join;
public class SonThread implements Runnable{
@Override
public void run(){
// TODO Auto-generated method stub
System.out.println("子執行緒:我要執行5秒鐘。");
try {
for(int i = 0; i < 5; i++){
System.out.println(i+1);
Thread.sleep(1000);
}
}catch(InterruptedException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("子執行緒:執行完畢。");
}
}
執行父執行緒
public static void main(String[] args){
System.out.println("主執行緒:開始執行");
Thread fa = new Thread(new FatherThread());
fa.start();
System.out.println("主執行緒:執行完畢");
}
看結果
主執行緒:開始執行
主執行緒:執行完畢
父執行緒:我只要執行1秒鐘。
父執行緒:執行完畢。
子執行緒:我要執行5秒鐘。
1
2
3
4
5
子執行緒:執行完畢。
由結果知道,1,主執行緒 執行完,2 父執行緒執行完,3子執行緒執行完。
我們使用join 方法之後的程式碼、
子執行緒程式碼不變,
父執行緒程式碼
package com.luoy.Thread.join;
public class FatherThread implements Runnable{
@Override
public void run(){
// TODO Auto-generated method stub
System.out.println("父執行緒:我只要執行1秒鐘。");
Thread son = new Thread( new SonThread());
son.start();
try{
son.join();
}catch(InterruptedException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("父執行緒:執行完畢。");
}
}
主執行緒程式碼
public static void main(String[] args){
System.out.println("主執行緒:開始執行");
Thread fa = new Thread(new FatherThread());
fa.start();
try{
fa.join();
}catch(InterruptedException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("主執行緒:執行完畢");
}
再看結果
主執行緒:開始執行
父執行緒:我只要執行1秒鐘。
子執行緒:我要執行5秒鐘。
1
2
3
4
5
子執行緒:執行完畢。
父執行緒:執行完畢。
主執行緒:執行完畢
這樣就看明白了,都會等待子執行緒執行完成,才繼續執行