多线程,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 线程运行结束!
                          主线程一定会等子线程都结束了才结束
posted @ 2021-12-05 14:40  jock_javaEE  阅读(49)  评论(0编辑  收藏  举报