zoukankan      html  css  js  c++  java
  • Java线程加入(join)

    1、线程一

     1 package com.cn.donleo.thread.join;
     2 
     3 /**
     4  * @author liangd
     5  * date 2020-11-02 09:58
     6  * code
     7  */
     8 public class ThreadOne extends Thread {
     9     /**
    10      * Thread类中的join方法的主要作用就是同步,
    11      * 它可以使得线程之间的并行执行变为串行执行
    12      */
    13     @Override
    14     public void run() {
    15         System.out.println("线程1开始跑");
    16         ThreadTwo threadTwo = new ThreadTwo();
    17         threadTwo.start();
    18         try {
    19             //join里面如果没有参数,则另一个线程执行完成以后再执行本线程
    20             threadTwo.join();
    21             //join里面如果有参数,则表示当前线程愿意等待的时间,如果时间小于另一个线程的时间,则到时间后不需等待,直接执行
    22             //表示最多给线程2两秒的时间
    23 //            threadTwo.join(2000);
    24         } catch (InterruptedException e) {
    25             e.printStackTrace();
    26         }
    27         System.out.println("线程1结束跑");
    28     }
    29 }

    2、线程二

     1 package com.cn.donleo.thread.join;
     2 
     3 /**
     4  * @author liangd
     5  * date 2020-11-02 09:58
     6  * code
     7  */
     8 public class ThreadTwo extends Thread {
     9     @Override
    10     public void run() {
    11         System.out.println("线程2开始跑");
    12         ThreadThree threadThree = new ThreadThree(this);
    13         threadThree.start();
    14         try {
    15             Thread.sleep(8000);
    16         } catch (InterruptedException e) {
    17             e.printStackTrace();
    18         }
    19         System.out.println("线程2结束跑");
    20 
    21     }
    22 }

    3、线程三

     1 package com.cn.donleo.thread.join;
     2 
     3 /**
     4  * @author liangd
     5  * date 2020-11-02 09:58
     6  * code
     7  */
     8 public class ThreadThree extends Thread {
     9     private final ThreadTwo threadTwo;
    10 
    11     /**
    12      * 通过构造函数获取线程二对象
    13      *
    14      * @param threadTwo
    15      */
    16     ThreadThree(ThreadTwo threadTwo) {
    17         this.threadTwo = threadTwo;
    18     }
    19 
    20     @Override
    21     public void run() {
    22         System.out.println("线程3开始跑");
    23         /*
    24           线程三的作用:
    25           1、将线程2保护起来
    26           2、Thread.sleep(5000) 表示允许线程2执行的时间,
    27              如果线程2睡眠的时间小于这个时间,则线程2运行完才运行结束线程3
    28              如果线程2休眠时间大于这个时间,则到了这个时间就直接结束线程3
    29          */
    30         synchronized (threadTwo) {
    31             try {
    32                 Thread.sleep(5000);
    33             } catch (InterruptedException e) {
    34                 e.printStackTrace();
    35             }
    36         }
    37 
    38         System.out.println("线程3结束跑");
    39     }
    40 }

    4、测试类

     1 package com.cn.donleo.thread.join;
     2 
     3 /**
     4  * @author liangd
     5  * date 2020-11-02 10:01
     6  * code 线程加入测试类
     7  */
     8 public class TestJoin {
     9     public static void main(String[] args){
    10         /*
    11             现在想做一个事情,就是让多线程变成单线程,就是人为控制线程的顺序
    12             以前我们线程的执行顺序是由CPU自动执行,现在我们人为控制,加join,把线程加入到另一个线程
    13          */
    14         ThreadOne threadone = new ThreadOne();
    15         threadone.start();
    16     }
    17 }
    作者:donleo123
    本文如对您有帮助,还请多推荐下此文,如有错误欢迎指正,相互学习,共同进步。
  • 相关阅读:
    InstallShield用于配置 IIS 的 InstallScrip(转)
    常见的几个.NET 面试题
    工作中常用的SQL语句,随用随加
    memcached系列之1:memcached基础知识简介(为什么要使用memcached做缓存服务器)
    Webbrowser的部分内容
    adox创建access数据文件
    CentOS5(64位)下Apache+SVN+Submin2安装记录
    使用Selenium进行回归测试所遇到的问题
    Maven+Sonar如何让单元测试只跑一次?
    CenOS5 Mysql安装可能出现的问题
  • 原文地址:https://www.cnblogs.com/donleo123/p/14069918.html
Copyright © 2011-2022 走看看