线程的join方法

线程的join方法join()方法的作用就是让主线程等待子线程执行结束之后再运行主线程。下面示例中t2为主线程,需要等待子线程t1执行完成再执行使用场景,线程2依赖于线程1执行的返回结果在线程2中调用线程1的join方法,即把cpu资源让给线程1publicstaticvoidmain(String[]args)throwsException{Threadt1=newThread(()->{try{T.

大家好,又见面了,我是你们的朋友全栈君。

 join()方法的作用就是让主线程等待子线程执行结束之后再运行主线程。下面示例中t2 为主线程,需要等待子线程t1 执行完成再执行

使用场景,线程2依赖于线程1执行的返回结果

在线程2 中调用线程1的join方法,当线程调用了这个方法时,线程1会强占CPU资源,直到线程执行结果为止(谁调用join方法,谁就强占cpu资源,直至执行结束)

这里说的是强占,而不是抢占,也就是说当这个线程调用 了join方法后,线程抢占到CPU资源,它就不会再释放,直到线程执行完毕。

    public static void main(String[] args) throws Exception{
      Thread t1 =  new Thread(()->{
          try {
              Thread.sleep(500);
              System.out.println("线程1醒了");
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
            for(int i=0;i<100;i++){
                System.out.println("线程1 i:"+i);

            }
      });
      t1.setName("线程1");

      Thread t2 = new Thread(()->{
          try {
              t1.join();
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
         for(int i=0;i<100;i++){
             System.out.println("线程2 i:"+i);
             try {
                 Thread.sleep(100);
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
         }
      });
      t2.setName("线程2");

        t2.start();
        t1.start();

    }

输出结果:

线程1醒了
线程1 i:0
线程1 i:1
线程1 i:2
线程1 i:3
线程1 i:4
线程1 i:5
……
线程1 i:99
线程2 i:0
线程2 i:1
线程2 i:2
线程2 i:3
线程2 i:4
……
线程2 i:99

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144090.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • get, getline, gets, getchar 用法「建议收藏」

    get, getline, gets, getchar 用法「建议收藏」1、cin  1、cin>>  用法1:最基本,也是最常用的用法,输入一个数字:  #include  usingnamespacestd;  main()  {  inta,b;  cin>>a>>b;  cout<

    2022年10月9日
  • git版本管理工具介绍(git管理工具有哪些)

    Git 是一个分布式版本控制工具,它的作者 LinusTorvalds是这样给我们介绍Git —— Thestupidcontenttracker(傻瓜式的内容跟踪器)1、Git背景Git最初由LinusTorvalds编写,用于Linux内核开发的版本控制工具。Git与常用的版本控制工具CVS、Subversion等不同,它采用了分布式版本库的方式,不必服务器端软

    2022年4月14日
  • JAVA静态内部类_java静态内部类实例化

    JAVA静态内部类_java静态内部类实例化写在前面  不知不觉,我正式入职到部门实习也有一周多的时间了,这段时间确实学到了不少东西。从大公司的办公、办事的流程准则,到程序员的日常研发工作和其中的注意事项,导师和同事们都很乐于帮助我融入这个新环境。  因为实习生不用加班,业余时间也比较多。便想着利用空闲时间来深入学习、总结一些平时工作中遇到的知识点和代码细节,把之前因为准备期末都快要荒废掉的写博客总结的习惯重新拾回来。fighting~!

    2022年10月10日
  • mybatis-log plugiin激活码(JetBrains全家桶)

    (mybatis-log plugiin激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1STL…

    2022年3月27日
  • 模型矩阵、视图矩阵、投影矩阵

    模型矩阵、视图矩阵、投影矩阵模型视图投影矩阵的作用,就是将顶点从局部坐标系转化到规范立方体(CanonicalViewVolnme)中。总而言之,模型视图投影矩阵=投影矩阵×视图矩阵×模型矩阵,模型矩阵将顶点从局部坐标系转化到世界坐标系中,视图矩阵将顶点从世界坐标系转化到视图坐标系下,而投影矩阵将顶点从视图坐标系转化到规范立方体中。如下图所示,假设现在要将三维空间中的三角形渲染到屏幕上。三角形的模型文件中,顶点坐标是…

    2022年5月14日
  • 如何简单运行Java程序

    如何简单运行Java程序本章开始,我们需要下苦功打基础,目标是完成一个会员管理系统哦!如何运行Java程序,用java命令即可,一定不要忘了写main方法哦,一个java文件里面可以写很多个class。步骤1java文件等于java类吗问大家一个问题,你认为java文件是java类吗?你可以用记事本写一个Demo.java的文本文件,编码是ansi,如果你的windows系统是简体中文的,那么所谓的ansi,其实就和GBK是一样的。在这个文件里,你可以写很多的class,但是声明为public的class只能有一个。

    2022年7月7日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号