1. 程式人生 > >多執行緒-join方法(主執行緒等待子執行緒執行完畢)

多執行緒-join方法(主執行緒等待子執行緒執行完畢)

多執行緒中的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
子執行緒:執行完畢。
父執行緒:執行完畢。
主執行緒:執行完畢

這樣就看明白了,都會等待子執行緒執行完成,才繼續執行