通过join方法顺序执行多个线程

Java多线程 用join方法控制线程按顺序执行。 控制一组线程安照顺序执行。 阅读详情

通过join方法顺序执行多个线程

方法一:直接用多线程之间的通讯去解决

package com.toov5.test;

import javax.imageio.ImageTypeSpecifier;

class Res1{
    char flag = 'A' ;
}


class A extends Thread{
    
    Res1 res;
    public A(Res1 res) {
        this.res=res;
    }    
    @Override
    public void run() {
        
        while (true) {
            synchronized (res) {
                if (res.flag == 'A') {
                    System.out.println("A");
                    res.flag='B';
                    res.notifyAll();
                }else {
                    try {
                        res.wait();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    
                }
            }
        }
        
    }
    
}



class B extends Thread{
    Res1 res;
    public B(Res1 res) {
        this.res=res;
    }    
    
    @Override
    public void run() {
        while (true) {
            synchronized (res) {
                if (res.flag == 'B') {
                    System.out.println("B");
                    res.flag='C';
                    res.notifyAll();
                }else {            
                    try {
                        res.wait();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
}



class C extends Thread{
    Res1 res;
    public C(Res1 res) {
        this.res=res;
    }    
    
  
    @Override
    public void run() {
        while (true) {
            synchronized (res) {
                if (res.flag == 'C') {
                    System.out.println("C");
                    res.flag='D';
                }else {
                    try {
                        res.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
}

public class Test9 {
    
     public static void main(String[] args) {
           Res1 res1 = new Res1();
           A a = new A(res1);
           B b = new B(res1);
           C c = new C(res1);
           a.start();
           b.start();
           c.start();
           
    }
    
    
    

}

方法二:join()去执行

 

public class JoinThreadDemo02 {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Runnable() {
            public void run() {
                System.out.println("A");
            }
        });
        Thread t2 = new Thread(new Runnable() {
            public void run() {
                try {
                    t1.join();
                } catch (Exception e) {
                    // TODO: handle exception
                }
                System.out.println("B");
            }
        });
        Thread t3 = new Thread(new Runnable() {
            public void run() {
                try {
                    t2.join();
                } catch (Exception e) {
                    // TODO: handle exception
                }
                System.out.println("C");
            }
        });
        t1.start();
        t2.start();
        t3.start();
    }
}

 

  解读:三个线程在交替执行,被cpu去调度。 如果调度的是t3 那么执行的是 t2.join()  此时t2线程又是跑了 t1.join(),一次类推、 

            总之 三个线程去调度时候 都是不确定的 每次的调度都是套着环在里面  每种可能性都有了设计

           我喜欢这样的代码

java 线程方法join的简单总结 在一般情况下,创建一个线程是不能提高程序的执行效率的,所以要创建多个线程。但是多个线程同时运行的时候可能调用线程函数,在多个线程同时对同一个内存地址进行写入,由于CPU时间调度上的问题,写入数据会被多次的覆盖,所以就要使线程同步。 同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。 “同”字从字面上容易理解为一起动作; 其实不是,“同”字应是指协同、协助、互相配合。 如进程、线程同步... 阅读详情

相关推荐

实战|验证码突破思路

漏洞成因:由于逻辑设计缺陷,可绕过验证,比如直接删除COOKIE或验证码参数可绕过、当验证不通过清空session时,验证码参数值为空时绕过等。测试方法:抓包,删除验证码字段,查看是否可以成功发送抓包,正常流程下,记录验证码后的数据包,替换目标包中内容,直接发送,查看是否可以直接绕过验证码案例:Step1.输入正确账户信息和错误验证码,登录时抓包Step2.删除COOKIEStep3.客户端登陆成功。

weixin_46239998的博客 8102

Java中join()方法的理解

thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。 比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。 t.join(); //调用join方法,等待线程t执行完毕t.join(1000); //等待 t 线程,等待时间是1000毫秒。 下面是一段JDK中的代码: /** ...

846

AT91SAM9260搭建LINUX操作系统

一、 编写目的 2 二、 系统搭建 2 1. 下载相关软件包 2 2. Bootstrap编译 3 3. U-BOOT编译 5 4. LINUX编译 7 5. 通过U-BOOT的TFTP命令从TFTP服务器下载系统镜像 9 6. 文件系统制作 10 7. 挂载NFS作为根文件系统 10 三、 总结 14 一、编写目的 本文档用于记录AT91SAM9260 LINUX学

lshiceman的专栏 7412

多线程顺序运行的几种方法,面试可以随便问

文章介绍4种方法,简单易懂,通过4个demo抛砖引玉。1、在子线程中通过join()方法指定顺序通过join()方法使当前线程“阻塞”,“”运行结果:2、在主线程中通过join()方法指定顺序子线程指的是发生在Thread内部的代码,主线程指的是发生在main函数中的代码。最新多线程面试题整理好了,点击Java面试库小程序在线刷题。我们可以在main函数中通过join()方法让主线程阻塞等待以达到指定顺序执行的目的。publicclassThreadMainJoinDemo{publicst...

资料免费分享,点击名片 256

UE5热更新(通过Pak包加载关卡资源,并添加到流关卡)

请先阅读我上一篇文章)**

xialuhui的博客 6456

RK3588上跑通Zipformer语音识别的3个坑与填坑实录(附完整编译命令)

本文详细记录了在RK3588开发板上部署Zipformer语音识别模型时遇到的三个典型问题及其解决方案,包括静态库版本冲突、编译脚本配置错误以及模型转换精度调优。文章提供了完整的编译命令和实战步骤,帮助开发者快速在边缘设备上实现高效的语音识别应用。

l6m7n8的博客 715

linux下,两个线程依次执行

如何实现Linux下双线程的依次执行? 法1:设置一个flag变量, 线程1执行后,设置flag为2;线程2执行后,设置flag为1;代码如下: #include #include #include #include #include #include #include int num = 0; int flag = 1; void function1(

mysee1989的专栏 1709

Qt5+OSG实战:如何用osgQOpenGLWidget在窗口中加载3D模型(附完整代码)

本文详细解析了如何在Qt5中使用osgQOpenGLWidget加载和渲染3D模型,涵盖环境配置、核心架构、性能优化及高级技巧。通过实战案例和完整代码,帮助开发者实现工业级3D模型渲染,提升Qt与OSG的整合效率。

weixin_42741930的博客 263

如何让多个线程按顺序执行

在多线程中有多种方法让线程按特定顺序执行,你可以用线程类的。本质上就变成了“单线程进行执行”。为了确保三个线程的顺序你应该先启动。一个线程中启动另一个线程,

NullpointerExcep的博客 1725

YOLOv12改进策略【Neck】| arXiv 2024 MAFPN:多分支辅助特征金字塔网络 | 通过双向辅助融合与异构卷积机制,解决传统PAFPN多尺度特征融合不充分与小目标检测不足问题

本文记录的是利用MAFPN颈部结构改进YOLOv12的目标检测网络模型。通过引入双向辅助融合机制优化特征处理流程,在自底向上路径利用 SAF 模块融合主干浅层特征与颈部输出,并保留浅层空间信息,为小目标检测提供更丰富细节;自顶向下路径通过 AAF 模块建立密集连接,聚合浅层高 / 低分辨率层、同级层及前层特征,均衡各层通道数后实现多向梯度信息交互,增强中 / 大目标特征表达。将其应用到中,解决传统特征金字塔在多尺度信息整合中的不足,提升多尺度目标检测的精度与特征表达的丰富性。Multi-Branch Aux

Limiiiing的博客 1256

ORB-SLAM3代码详解 - 第 18 篇 · Atlas 多地图系统、地图保存与全系统调优

会跑:理解三线程架构与数据流(01/08/10/13),能编译、配参、复现各数据集结果。会改:掌握相机模型抽象(05)、g2o 顶点与边(14)、预积分(15),能接入新传感器、新相机、新约束。会调:理解每个参数背后的物理含义与耦合(03/15/16/18),能针对自己的平台与场景做精度/实时/鲁棒的权衡。ORB-SLAM3 的价值不止于一个可用的 SLAM 系统,更在于它是一套工程化的几何状态估计模板:清晰的模块边界、可替换的相机/传感器抽象、紧耦合优化的标准范式。

PX4-SLAM-PNC 172

Java使用join方法让多个线程顺序执行【案例学习】

Java使用join方法让多个线程顺序执行!

末尾卡片和博主交流学习! 1259

【ARM CoreLink 系列 4.2 -- NI-700 Function units 详细介绍】

CoreLink NI-700的ASNI(AXI系统网络接口)完成者单元负责接收并处理来自AXI请求者设备的请求。这些单元将事务打包成根据NI-700通用传输(GT)协议的Flits,并将GT响应Flits解包成AXI响应。AXI与GT协议之间的请求、数据和响应事务的转换:确保AXI事务可以被NI-700网络正确处理,并将GT协议的响应正确转换回AXI响应。入站事务的突发拆分。

CodingCos的博客 1323

现在有T1、T2、T3三个线程,怎样保证T2在T1执行完后执行,T3在T2执行完后执行?...

要保证T1、T2、T3三个线程顺序执行,可以利用Thread类的join方法。 join方法是synchronized,所以需要获取Thread的对象锁才能进入,只有获得了锁才能调用wait放弃对锁的独占并等待再次获取锁。 join方法用线程对象调用,如果...

weixin_30770495的博客 233

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Thread:线程顺序执行的四种方式

线程顺序执行的四种方式 1、通过监测信号 每个线程对应自己的一个信号,监测到信号就执行,执行完就将信号更改为下一个线程的信号 2、通过FutureTask可以阻塞获取返回值的特性 顺序开启线程并获取返回值,线程将依次执行,返回结果 3、通过join()阻塞等待线程执行完 按线程执行顺序,依次join()进行阻塞 4、通过单线程线程池特性 线程池中只有一个线程,任务会在队列中,按提交顺序依次执行 线程顺序执行的代码示例 public class ThreadOrder { public stat

最爱猫被窝 3823

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

JUC之线程顺序执行的2种方式【CountDownLatch、Thread.join()】

JUC之线程顺序执行 方式一:使用Thread中的join() ​ join() 用于不断让当前线程等待join线程之行结束。其原理就是不停的检查join线程是否存活,如果join线程存活则让当前线程影院等待。其中源码中wait(0)表示永远等待下去。直到线程被唤醒。 ...

龙飞的博客 8204

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

多线程join()方法使用

Thread类中有一个join()方法,此方法表示,在当前线程中a中,b线程调用join()方法,那么,a线程就会释放资源,让给b线程先执行。 举例1:主线程main让子线程先进行执行 package com.cvicse.thread.demo; public class ThreadDemo4 { public static void main(String[] args){ T...

yi_chen_的博客 983

Java多线程join方法实例分析

定义 首先看一下相关教材上怎么说的:如果一个线程A执行了thread.join()语句,其含义是:当前线程A等待thread线程终止后才从thread方法返回。 接下来我们直接看例子,不出意外,和我们预想的一样,线程A和线程B交替输出结果。 public class LockTest { public static void main(String[] args) throws I...

Hollake的博客 1452

main线程 子线程 顺序_理解Java指定线程执行顺序(三种方式)

Java实现指定线程执行顺序的三种方式示例本文实例讲述了Java实现指定线程执行顺序的三种方式。分享给大家供大家参考,具体如下:方法一:通过共享对象锁加上可见变量来实现。public class MyService {private volatile int orderNum = 1;public synchronized void methodA() {try {while (orderNum ...

weixin_39527292的博客 486

java main线程 join_转载:Java多线程中join方法的理解

转载自:http://uule.iteye.com/blog/1101994thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。t.join(); //使调用线程 t 在此之前执行完毕。t.join(1000); //等待 t 线程,等待时间是1000毫秒...

weixin_29486701的博客 242

指定顺序执行线程

public class Test { /* thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。 比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。 想要更深入了解,建议看一下join的源码,也很简单的,使用wait方法实现的。 t.join(); //调用join方法,等待线程t执行完毕 t.join(1000); //等待 t 线程,等待时间是100.

song_chengbo的博客 221

Java面试必备:如何在Java中控制多个线程的执行顺序

在多线程编程中,线程的执行顺序通常是不确定的,由操作系统调度器决定。然而,在某些场景下,我们需要控制线程的执行顺序以满足特定的业务需求。本文将介绍几种在Java中控制线程执行顺序的方法,并通过流程图帮助理解这些机制。

qq_58299462的博客 1710

main线程 子线程 顺序_面试官问我:如何让多个线程按顺序执行?

听说微信搜索《Java鱼仔》会变更强哦!本文收录于JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦(一)问题如何让多个线程按顺序执行?(二)结论1.主线程中使用join2.子线程中使用join3.使用单一化线程池(三)再多学一点我们都知道线程的执行顺序是无序的,但是有的时候我们希望线程按顺序执行该怎么做呢?我在下面提供了三种方式:1.主线程中使用joinpublic...

weixin_42518874的博客 182

多个线程顺序执行探究

目录 1、使用场景 2、多个线程顺序执行的实现方法 2.1、原子类型实现线程顺序执行 2.2、volatile变量实现线程顺序执行 2.3、线程的join方法实现线程顺序执行 2.4、线程池的submit方法实现 3、完成源码地址: 4、参考文章 1、使用场景 在实际项目之中可能会要求执行多个线程;并且要求线程能够按照指定的顺序进行执行。网上搜索了好几篇文章,看...

一颗浑身披带雪花的松树---[雪松] 301

线程加入:join方法

join方法用于等待其他线程终止 如果线程A中调用了线程B的join方法,那么线程A阻塞,直到线程B执行完后,线程A从阻塞状态转为就绪状态,等待获取CPU的使用权。 join方法要在start方法调用后调用才有效,线程必须启动,再加入。 例子1: 让两个线程顺序打印1,2,3,即线程A打印123,线程A打印完后,线程B再打印 public class Main{ public static void main(String[] args) throws InterruptedException {

yinianxx的博客 453
上一篇: MySQL读写分离
下一篇: 自动补偿机制(消费者)及幂等问题
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值