【Java】有 A、B、C 三个线程,如何保证三个线程同时执行?在并发情况下,如何保证三个线程依次执行?如何保证三个线程有序交错执行?

news2025/5/23 15:57:12

Q1:有 A、B、C 三个线程,如何保证三个线程同时执行?

public class ThreadSafeDemo {
    public static void main(String[] args) throws InterruptedException {
        int size = 3;
        ThreadSafeDemo threadSafeDemo = new ThreadSafeDemo();
        CountDownLatch latch = new CountDownLatch(1);
        for (int i = 0; i < size; i++) {
            new Thread(() -> {
                try {
                    latch.await();
                    System.out.println(System.currentTimeMillis());
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
        }
        Thread.sleep(1000);
        latch.countDown();
    }
}

CountDownLatch相当于体育考试场景:4位考生站在起跑线上等待考官下达口令即可往前冲

 

Q2:有 A、B、C 三个线程,在并发情况下,如何保证三个线程依次执行?

public class UseVolatile {
    static volatile int count = 1;

    public static void main(String[] args) {

        Thread t1 = new Thread(() -> {
            while (true) {
                if (count == 1) {
                    try {
                        Thread.sleep(100);
                        for (int i = 0; i < 3; i++) {
                            System.out.println("A" + i);
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    count = 2;
                    return;
                }
            }
        });

        Thread t2 = new Thread(() -> {
            while (true) {
                if (count == 2) {
                    try {
                        Thread.sleep(100);
                        for (int i = 0; i < 3; i++) {
                            System.out.println("B" + i);
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    count = 3;
                    return;
                }
            }
        });

        Thread t3 = new Thread(() -> {
            while (true) {
                if (count == 3) {
                    try {
                        Thread.sleep(100);
                        for (int i = 0; i < 3; i++) {
                            System.out.println("C" + i);
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    count = 1;
                    return;
                }
            }
        });
        t1.start();
        t2.start();
        t3.start();
    }
}

Q3:有 A、B、C 三个线程,如何保证三个线程有序交错执行?

public class OrderThread {
    private static Semaphore s1=new Semaphore(1);
    private static Semaphore s2=new Semaphore(1);
    private static Semaphore s3=new Semaphore(1);
    public static void main(String[] args) {
        try {
            s1.acquire();
            s2.acquire();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(()->{
            while (true){
                try {
                    s1.acquire();
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("A");
                s2.release();
            }
        }).start();

        new Thread(()->{
            while (true){
                try {
                    s2.acquire();
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("B");
                s3.release();
            }
        }).start();

        new Thread(()->{
            while (true){
                try {
                    s3.acquire();
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("C");
                s1.release();
            }
        }).start();
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1010778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TypeScript扩展类型定义

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 什么是声明文件&#xff1f; declare 1. 声明全局变量&#xff1a; 2. 声明全局函数&#xff1a; 3. 声明全局类…

2023年最适合0基础上手的—学生管理系统制作,另赠福利:GUI学生管理系统源码

前言 嗨喽~大家好呀&#xff0c;这里是小曼呐 ❤ ~! 环境使用: python3.8解释器Pycharm 编辑器 可领取福利: GUI学生管理系统源码 代码展示 从学生信息数据库<文本文件>里面读取数据 f open(学生信息.txt, encodingutf-8) info_list f.readlines()创建一个空列表 …

代码随想录算法训练营第48天|198. 打家劫舍,213. 打家劫舍 II,337. 打家劫舍 III

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

ubuntu 安装截图软件 flameshot 和微信 electronic-wechat

目录 一、截图工具flameshot 二、微信electronic-wechat 2.1 法一 2.2 法二 一、截图工具flameshot linux安装flameshot 1、去github下载对应deb版本 Releases flameshot-org/flameshot GitHub 2、先更新一次依赖 sudo apt-get install -f 3、安装依赖 # Compile-t…

OceanBase杨传辉传递亚运火炬:国产数据库为“智能亚运”提供稳稳支持

9 月 14 日&#xff0c;亚运火炬传递到了浙江台州&#xff0c;OceanBase 的 CTO 杨传辉作为火炬手交接了第 89 棒火炬。 2010 年&#xff0c;杨传辉作为创始成员之一参与自研原生分布式数据库 OceanBase。十年磨一剑&#xff0c;国产数据库 OceanBase 交出了一张优秀的成绩单&a…

JavaScript Iterator 迭代器:简化集合遍历的利器

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 引言 1. 迭代器的概念 2. 迭代器的属性 3. 迭代器的应用场景 3.1 数组遍历 3.2 对象遍历 3.3 Map 遍历 #3.4…

pandas-profiling一键生成探索性数据分析报告

安装库 1、先升级pip python.exe -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple 2、安装pandas-profiling pip install pandas-profiling -i https://pypi.tuna.tsinghua.edu.cn/simple 代码演示 # 导入相关库 import numpy as np import pand…

端游防截帧解决方案

对于一款游戏而言&#xff0c;玩家第一眼关注到的美术表现&#xff0c;会在很大程度上决定了玩家是否会产生兴趣并继续了解游戏内容。想要在激烈的市场竞争中占据一席之地&#xff0c;游戏美术的重要程度已不言而喻。 如被奉为“国产3A游戏之光”的《黑神话&#xff1a;悟空》…

由于找不到vcruntime140_1.dll文件的解决方法,带你了解vcruntime140_1.dll这个dll

vcruntime140_1.dll是Microsoft Visual C Redistributable for Visual Studio 2019的动态链接库文件之一。它提供了许多基本的运行时功能&#xff0c;使得使用Visual Studio 2019编译的应用程序能够正常运行。然而&#xff0c;在运行或启动一些应用程序时&#xff0c;可能会出现…

每天一道leetcode:剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(适合初学者)

今日份题目&#xff1a; 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xf…

常见音视频、流媒体开源编解码库及官网(四十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

大麦订单生成器最新版 大麦订单一键生成截图

1.可以一键添加&#xff0c;生成的假订单没有水印&#xff0c;界面也很真实。 2.在软件中输入生成的信息&#xff0c;这是产品信息&#xff0c;选择生成的产品图像&#xff0c;最后生成它。 后台一键生成&#xff0c;独立后台管理 教程&#xff1a;解压源码&#xff0c;修改数…

电子学会C++编程等级考试2023年05月(二级)真题解析

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 第1题&#xff1a;数字放大 给定一个整数序列以及放大倍数x&#xff0c;将序列中每个整数放大x倍后输出。 时间限制&#xff1a;1000 内存限制&#xff1a;65536 输入 包含三行&#xff1a; 第一行为N&#xff0c;表示整…

nginx实现路由重定向功能 避免服务器出现 404 Not Found

首先 到服务器上 vue react等项目路由的重定向已解决不了带后缀的访问 这个重定向需要 nginx 来实现 我们先执行 scp -r 用户名 如果没设置过就是root服务器公网地址:/etc/nginx/nginx.conf E:/拷贝地址这里 我将服务器上的nginx配置文件 拷贝到了本地的 E盘下的 拷贝地址目录…

CocosCreator3.8研究笔记(十六)CocosCreator 2D对象

CocosCreator 中&#xff0c;不涉及模型的图片渲染体统称为 2D 渲染对象。 所有的 2D渲染对象需在 RenderRoot 节点下&#xff08;带有 RenderRoot2D 组件的节点&#xff09;才可以被渲染&#xff0c;由于 Canvas 组件本身继承 RenderRoot2D 组件&#xff0c;所以 Canvas 组件一…

分享一个基于微信小程序的汽车租赁小程序 车辆出租小程序 汽车租借小程序源码 lw 调试

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…

typescript环境搭建,及tsc命令优化

typescript typescript. 是一种由微软开发的 开源 、跨平台的编程语言。. 它是 JavaScript 的超集&#xff0c;最终会被编译为JavaScript代码。. TypeScript添加了可选的静态类型系统、很多尚未正式发布的ECMAScript新特性&#xff08;如装饰器 [1] &#xff09;。. 2012年10月…

华为HCIA(三)

链路本地地址接口标识64bit 当STP端口到了Forwarding状态后&#xff0c;会转发流量&#xff0c;也处理报文 在TCP/IP模型中&#xff0c;会话层&#xff0c;表示层和应用层&#xff0c;都规划成了应用层 路由表包含目的地址和掩码&#xff0c;优先级&#xff0c;cost,下一跳和…

2023/09/14 qtc++

仿照vector手动实现自己的myVector部分功能&#xff0c;最主要实现二倍扩容功能 #include <iostream>using namespace std; template <typename V> class myVector { private:V *data; //存放数据int size; //数组长度int capacity; //容量大小 public:m…

项目实战— pytorch搭建CNN处理MNIST数据集

项目文件夹介绍 项目文件夹 CNN_MNIST_practice文件夹是整个项目的文件夹&#xff0c;里面存放了六个子文件夹以及四个 .py 程序&#xff0c;接下来我们分别来介绍这些文件的内容。 其中 minist_all_CPU.py 是CPU版本的模型训练&#xff0b;测试程序&#xff0c;而 min…