编程题:多线程交替打印ABC

2023-05-16

要求创建3个线程,分别打印ABC,共交替打印10次。

public class Main {
    // 以A开始的信号量,初始信号量数量为1
    private static Semaphore A = new Semaphore(1);
    // B、C信号量,A完成后开始,初始信号数量为0
    private static Semaphore B = new Semaphore(0);
    private static Semaphore C = new Semaphore(0);

    public static void main(String[] args) {
        new Thread(() -> {
            try {
                for (int i = 0; i < 10; i++) {
                    // A获取信号执行,A信号量减1,当A为0时将无法继续获得该信号量
                    A.acquire();
                    System.out.print("A");
                    // B释放信号,B信号量加1(初始为0),此时可以获取B信号量
                    B.release();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        new Thread(() -> {
            try {
                for (int i = 0; i < 10; i++) {
                    B.acquire();
                    System.out.print("B");
                    C.release();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        new Thread(() -> {
            try {
                for (int i = 0; i < 10; i++) {
                    C.acquire();
                    System.out.print("C");
                    A.release();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
    }
}

控制台输出:

ABCABCABCABCABCABCABCABCABCABC
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编程题:多线程交替打印ABC 的相关文章

随机推荐

  • git clone 指定某个分支

    原文 xff1a https blog csdn net qq 28903377 article details 82978583 最近在搭建Gitblit内网仓库时发现一个问题 xff0c git clone 只能clone整个仓库 xf
  • B站Unity官方教程合集(不定期更新)

    Unity官方有好多教程 xff0c 可以帮助我们快速掌握这款引擎的使用 xff0c 但官网上的视频都是油管的 xff0c 故这里为大家整合了一些在B站上的搬运视频 xff0c 很多还是有翻译字幕的 xff0c 比搭梯子方便多了 xff08
  • STM32连接HT1621段码屏驱动

    HT1621 128个位元LCD控制器 xff0c 内部RAM直接对应LCD显示单元 对于HT1621 操作之前应发送标志码 xff0c 表明要求工作在哪种状态 xff0c 标志定义如下 xff1a 操作状态标志码读数据110写数据101读
  • RTK与PPK

    1 通讯方式不同 RTK技术需要无线电台或网络来传输差分数据 PPK技术不需要通信技术的支持 xff0c 并且可以记录静态数据 2 定位方法不同 RTK所使用的实时定位技术使您可以随时在流动站上查看测量点的坐标和精度 xff1b PPK定位
  • iOS真机调试报错(0xE8008016)相关错误

    经常真机运行时候会报错 xff0c 原因之一是之前对项目进行过打包进行如下设置 将Edit Scheme gt Run gt Build Configuration 设置为Release 将其勾选为 Debug状态 xff0c 接下来继续运
  • 支付宝快捷登录相关事宜

    接近年关 xff0c 公司产品提出新需求 xff0c 和支付宝合作 xff0c 需要开发快捷登录 无线账户授权 xff0c 手机端装有支付宝钱包 xff0c 直接唤起支付宝钱包 xff0c 若没有支付宝钱包就直接走HTML5页面操作 xff
  • mac系统Tunnelblick 下载以及安装流程

    公司有些网站有权限设置 xff0c 不同的域账号权限不一样 xff0c 因此需在电脑上安装Tunnelblick xff0c 才能使用 xff0c 接下来给大家介绍一下步骤 xff1a 首先要有安装vpn对应的一系列配置文件 xff1a c
  • IOS App提交到appStore Missing 64-bit support

    Dear developer We have discovered one or more issues with your recent delivery for 34 就医宝 34 Your delivery was successfu
  • MAC 安装cocoapods

    首先是看了文章 xff1a http code4app com article cocoapods install usage http www uml org cn mobiledev 201411072 asp 一 检测以及配置Ruby
  • U8SDK——开发统一的手游防沉迷插件

    关于统一防沉迷插件的配置和使用 xff0c 可以参考我们B站上面录制的视频教程 未满18岁那个视频 xff1a U8SDK官方视频 根据手游防沉迷和实名认证政策的要求 xff0c 手机游戏需要引导玩家进行实名认证 xff1b 同时针对未成年
  • Unable to run app in Simulator(Domain = LaunchServicesErrror, Code = 0)

    NSArray paths 5 61 NSSearchPathForDirectoriesInDomains NSLibraryDirectory NSUserDomainMask YES Users hkqj Library Develo
  • 微信支付登录总结

    做微信支付 xff0c 登录之前需要 提前注册开发者帐号 xff0c 创建移动应用 代码下载路径 xff1a http pan baidu com s 1o7aBxqU xff08 主要是做笔记 xff0c 把微信登录以及微信支付整到一起
  • 微软仿真神器 AirSim + Unreal Engine 4.24 + Ubuntu 18.04 + ROS 编译流程小结

    时间 xff1a 20210107 文章目录 一 参考资料二 系统情况简介三 编译UE引擎流程四 UE引擎测试五 AirSim编译流程六 UE 4 24 43 AirSim 联合测试七 AirSim 的 ROS 功能包测试八 UE 43 R
  • android进阶---【注解(一)之运行时注解】

    android进阶 注解 注解1 什么是注解2 注解的产生3 注解的基础介绍3 1元注解3 2运行时注解与编译时注解区别 4 自定义注解4 1自定义编写规则4 2自定义运行时注解 注解 注解这个概念 xff0c 有些人可能会有些陌生 但是撸
  • 设计容器 实现put get getCount 方法,生产者消费者问题

    设计一个容器 xff0c 支持put get getCount 方法 xff0c 满足两个生产者 二十个消费者阻塞调用 public class ProdConsuCont static ReentrantLock lock 61 new
  • C++程序员必看书单

    转载 xff1a https blog csdn net ljy1988123 article details 7748913 comments C 43 43 xff1a Prata C 43 43 Primer Plus xff1a 基
  • git submodule 升级commit并push

    git submodule 升级commit并push 关于这个问题 xff0c 可以参照以下文章 xff1a https blog csdn net wwj 748 article details 73991862 流程写的很清楚 xff
  • 欧拉角pitch、yaw,roll的理解

    关于旋转永远是做游戏的难点和混乱点 我们知道表示一个旋转有多种方式 xff0c 简单的欧拉角 xff0c 复杂点的四元数 xff0c 再复杂点的矩阵 之前接触unity可以用四元数和欧拉角两种方式表示旋转 xff0c 最近一直研究虚幻引擎
  • Mac执行ruby命令提示 dyld: Library not loaded等类似问题解决方案

    说一下为啥会遇见这么个问题 xff0c 我在给一个xcode项目添加podfile的时候 xff0c 在终端执行了pod init命令 xff0c 随即给了我一个如下图的提示 xff08 报错信息一样的 xff0c 执行pod的命令早就被解
  • 编程题:多线程交替打印ABC

    要求创建3个线程 xff0c 分别打印ABC xff0c 共交替打印10次 span class token keyword public span span class token keyword class span span clas