1. 程式人生 > 其它 >多執行緒,Join()

多執行緒,Join()

一、定義:就是該執行緒是指的主執行緒等待子執行緒的終止。也就是在子執行緒呼叫了join()方法,後面的程式碼,只有等到子執行緒結束了才能執行

二、不加join:

                        class Thread1 extends Thread{
                        private String name;
                        public Thread1(String name) {
                        	super(name);
                           this.name=name;
                        }
                    	public void run() {
                    		System.out.println(Thread.currentThread().getName() + " 執行緒執行開始!");
                            for (int i = 0; i < 5; i++) {
                                System.out.println("子執行緒"+name + "執行 : " + i);
                                try {
                                    sleep((int) Math.random() * 10);
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                            System.out.println(Thread.currentThread().getName() + " 執行緒執行結束!");
                    	}
                    }
                     
                    public class Main {
                     
                    	public static void main(String[] args) {
                    		System.out.println(Thread.currentThread().getName()+"主執行緒執行開始!");
                    		Thread1 mTh1=new Thread1("A");
                    		Thread1 mTh2=new Thread1("B");
                    		mTh1.start();
                    		mTh2.start();
                    		System.out.println(Thread.currentThread().getName()+ "主執行緒執行結束!");
                     
                    	}

          輸出結果:

                main主執行緒執行開始!
                main主執行緒執行結束!
                B 執行緒執行開始!
                子執行緒B執行 : 0
                A 執行緒執行開始!
                子執行緒A執行 : 0
                子執行緒B執行 : 1
                子執行緒A執行 : 1
                子執行緒A執行 : 2
                子執行緒A執行 : 3
                子執行緒A執行 : 4
                A 執行緒執行結束!
                子執行緒B執行 : 2
                子執行緒B執行 : 3
                子執行緒B執行 : 4
                B 執行緒執行結束!
                發現主執行緒比子執行緒早結束

三、加join:

                          public class Main {
                           
                          	public static void main(String[] args) {
                          		System.out.println(Thread.currentThread().getName()+"主執行緒執行開始!");
                          		Thread1 mTh1=new Thread1("A");
                          		Thread1 mTh2=new Thread1("B");
                          		mTh1.start();
                          		mTh2.start();
                          		try {
                          			mTh1.join();
                          		} catch (InterruptedException e) {
                          			e.printStackTrace();
                          		}
                          		try {
                          			mTh2.join();
                          		} catch (InterruptedException e) {
                          			e.printStackTrace();
                          		}
                          		System.out.println(Thread.currentThread().getName()+ "主執行緒執行結束!");
                           
                          	}
                          }
      
    
                   輸出結果:

                          main主執行緒執行開始!
                          A 執行緒執行開始!
                          子執行緒A執行 : 0
                          B 執行緒執行開始!
                          子執行緒B執行 : 0
                          子執行緒A執行 : 1
                          子執行緒B執行 : 1
                          子執行緒A執行 : 2
                          子執行緒B執行 : 2
                          子執行緒A執行 : 3
                          子執行緒B執行 : 3
                          子執行緒A執行 : 4
                          子執行緒B執行 : 4
                          A 執行緒執行結束!
                          主執行緒一定會等子執行緒都結束了才結束