首页 > 其他分享 >面试:多线程顺序打印

面试:多线程顺序打印

时间:2024-09-23 11:54:33浏览次数:9  
标签:join threadT1 Thread 打印 T2 面试 线程 多线程 public

        在多线程中有多种方法让线程按特定顺序执行,可以用线程类的join()方法在一个线程中启动另一个线程,另外一个线程完成该线程继续执行。比如说:使用join方法,T3调用T2,T2调用T1,这样就能确保T1就会先完成而T3最后完成。

        定义三个类,分别实现Runnable接口,每个类将表示一个线程。这三个类需要重写run()方法,并在其中添加逻辑。

T1类 (ThreadT1)
public class ThreadT1 implements Runnable {
    @Override
    public void run() {
        System.out.println("T1开始执行");
        try {
            // 等待T2完成
            ThreadT2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("T1完成执行");
    }
}
T2类 (ThreadT2)
public class ThreadT2 implements Runnable {
    @Override
    public void run() {
        System.out.println("T2开始执行");
        try {
            // 等待T3完成
            ThreadT3.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("T2完成执行");
    }
}
T2类 (ThreadT2)
public class ThreadT3 implements Runnable {
    @Override
    public void run() {
        System.out.println("T3开始执行");
        System.out.println("T3完成执行");
    }
}
主程序中按照所需顺序启动
public class Main {
    public static void main(String[] args) {
        Thread threadT1 = new Thread(new ThreadT1());
        Thread threadT2 = new Thread(new ThreadT2());
        Thread threadT3 = new Thread(new ThreadT3());

        // 按照顺序启动线程
        threadT1.start();
        try {
            threadT1.join(); // 等待T1完成
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        threadT2.start();
        try {
            threadT2.join(); // 等待T2完成
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        threadT3.start();
    }
}

工作原理如下:

  1. main 方法中首先创建了三个线程对象。
  2. 它们被依次启动:threadT1.start(),然后等待threadT1完成,通过调用threadT1.join()来实现。
  3. threadT1完成后,启动threadT2,并等待它完成。
  4. 最后,启动threadT3,由于之前两个线程已经完成,它可以直接运行。

标签:join,threadT1,Thread,打印,T2,面试,线程,多线程,public
From: https://blog.csdn.net/weixin_64204704/article/details/142406833

相关文章

  • python面试题
    python是什么?Python是一种开放原始码、直译式、可携式、面向对象的程序语言,具有模块、多线程、异常处理以及自动内存管理功能。广泛应用包括Web开发(如Django和Flask框架)、数据科学(如Pandas和NumPy库)、机器学习(如TensorFlow和PyTorch框架)、自动化脚本、科学计算等。算法是什么?......
  • c++多线程,锁
    1)机器最大线程数uint16_tmax_thread=thread::hardware_concurrency();2)vector中管理线程获取线程ida)thread::id_id=std::this_thread::get_id();b)threadth(getSum_vector,ref(arr),ref(_sum));cout<<th.get_id();容器中存储线程变量:使用emplace_back原位构造a......
  • 用了MyBatis的项目 如何优雅地打印SQL
    前言在使用MyBatis或者MyBatis-Plus作为ORM框架的时候,会发现默认的日志输出是下面这样的:在参数少并且SQL简单的情况下,这样的SQL我们能通过手动去替换占位符,来获取到真正执行的SQL。但是如果是比较复杂的SQL,或者查询参数比较多的话,一个个替换就比较费时费力了。MyBatisPlugin......
  • Java面试题大全(全网最全,持续更新)初级(2)
    1.基础语法1.1.Java的数据类型有哪些?Java有两种数据类型:基本数据类型(PrimitiveTypes):包括byte、short、int、long、float、double、char、boolean。引用数据类型(ReferenceTypes):包括类、接口、数组等。1.2.final关键字有什么作用?final关键字可以用来修饰类、方......
  • 25豪迈面试/机械研发工程师攻略
    25豪迈机械面试面试题目+答案豪迈面试/机械研发工程师:一面问题:1、高考成绩&四六级成绩回答示例:“我的高考成绩虽然不能直接反映我的专业能力,但它是我努力学习的证明。至于四六级成绩,我顺利通过了大学英语六级考试,这有助于我在阅读英文技术文档和国际交流时更加自如。”......
  • 25石头科技机械结构工程师机械面试问题攻略
    25石头科技机械结构工程师面试心得石头科技面试题目+答案免费资源:【免费】25石头科技机械结构工程师机械面试心得资源-CSDN文库https://download.csdn.net/download/m0_72216164/89768935?spm=1001.2014.3001.5503下面分享石头科技机械结构工程师面试全过程。①一面(40min)......
  • 【面试经验】商汤NLP一面
    整体不到1h前20min讲了一个项目,没太详细问。然后八股:Llama2架构(embedding,transformerblock,LMhead)Llama2transformerblock里做了哪些改变(RMSNorm,RoPE,SwiGLU,PreNorm不太清楚说全了没)为什么用RMSNorm不用LayerNorm(答参数量少,不太对)为什么用RoPE不用绝......
  • 【面试经验】大疆2024届秋招控制算法岗笔试
    建议之后想进大疆控制方向的学弟学妹们,准备好以下几点,笔试挂掉的血泪教训:1、经典控制理论和现代控制理论经典控制里面的拉式变换、传递函数建立、稳定性裕量、稳定性判据、系统校正和零极点配置,要熟练掌握;现代控制理论里面根据动态系统列状态空间方程,观测器估计器收敛性分......
  • Java集合类面试题:Map接口(链表、HashMap、红黑树)
    收集大量Java经典面试题目......
  • 面试-JS异步进阶
    面试题:......