多线程,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 @   jock_javaEE  阅读(50)  评论(0编辑  收藏  举报
编辑推荐:
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
阅读排行:
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· 赶AI大潮:在VSCode中使用DeepSeek及近百种模型的极简方法
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
历史上的今天:
2020-12-05 ShardingJdbc学习笔记
点击右上角即可分享
微信分享提示