当前位置: 首页 > news >正文

JAVA两个线程交替打印实现

方案1 Semaphore 机制

通过信息号机制来 协调两个线程,一个线程打印后,给另一个线程释放一个信号量

  Semaphore semaphorea = new Semaphore(1);Semaphore semaphoreb = new Semaphore(0);Thread threada = new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 50; i++) {try {semaphorea.acquire();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("a");semaphoreb.release();}}});Thread threadb = new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 50; i++) {try {semaphoreb.acquire();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("b");semaphorea.release();}}});threada.start();threadb.start();

方案2

通过锁的condition来两个线程协作

public class AlternatePrintAB {private static boolean printA = true; // 初始化为true,用于控制打印的起始public static void main(String[] args) {Lock lock = new ReentrantLock();Condition conditiona = lock.newCondition();Condition conditionb = lock.newCondition();Thread thread = new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 10; i++) {try {lock.lock();while (!printA) {try {//不打印A时,A等待conditiona.await();//await 会释放锁,唤醒时,要重新获取锁} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("A");printA = false;conditionb.signal();} catch (Exception e) {throw new RuntimeException(e);} finally {lock.unlock();}}}});Thread thread1 = new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 10; i++) {lock.lock();while (printA) {try {//打印A时,B等待conditionb.await();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("B");printA = true;conditiona.signal();}}});thread.start();thread1.start();}}

相关文章:

JAVA两个线程交替打印实现

方案1 Semaphore 机制 通过信息号机制来 协调两个线程&#xff0c;一个线程打印后&#xff0c;给另一个线程释放一个信号量 Semaphore semaphorea new Semaphore(1);Semaphore semaphoreb new Semaphore(0);Thread threada new Thread(new Runnable() {Overridepublic void…...

【C语言】学习C语言

C语言简介 C语言是一门十分流行的编程语言&#xff0c;由美国贝尔实验室的 Dennis Ritchie 在 20 世纪 70 年代开发。 C语言具有高效、可移植、灵活、简单等特点&#xff0c;被广泛应用于操作系统、编译器、数据库、图形界面、嵌入式系统、网络通信、游戏等领域。 本文将带你…...

C 深入指针(2)

目录 1 野指针 1.1 成因 1.2 如何规避野指针 2 assert 断言 2.1 用法 2.2 assert 的优点 2.1 assert 的缺点 3 小注解 3.1 Debug 和 Release 1 野指针 【概念】&#xff1a; 野指针就是指针指向的位置是不可知的&#xff08;随机的、不正确的、没有明确限制的&#…...

FileLink跨网文件交换,推动企业高效协作|半导体行业解决方案

随着信息技术的迅猛发展&#xff0c;全球信息产业已经迎来了前所未有的繁荣与变革。在这场科技革命中&#xff0c;半导体作为信息产业的基础与核心&#xff0c;其重要性日益凸显&#xff0c;半导体的应用场景和市场需求将进一步扩大。 然而&#xff0c;在这一繁荣的背后&#x…...

代码随想录day56 | 动态规划P16 | ● 583. ● 72. ● 编辑距离总结篇

583. 两个字符串的删除操作 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 &quo…...

ASP.NET网络在线考试系统

摘 要 随着计算机技术的发展和互联网时代的到来&#xff0c;人们已经进入了信息时代&#xff0c;也有人称为数字化时代。数在数字化的网络环境下&#xff0c;学生希望得到个性化的满足&#xff0c;根据自己的情况进行学习&#xff0c;同时也希望能够得到科学的评价&#xff0c…...

天锐绿盾 | 办公加密系统,源代码防泄密、源代码透明加密、防止开发部门人员泄露源码

天锐绿盾作为一款专注于数据安全与防泄密的专业解决方案&#xff0c;它确实提供了针对源代码防泄密的功能&#xff0c;帮助企业保护其核心的知识产权。 PC地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是天锐绿盾可能采…...

Day1| Java基础 | 1 面向对象特性

Day1 | Java基础 | 1 面向对象特性 基础补充版Java中的开闭原则面向对象继承实现继承this和super关键字修饰符Object类和转型子父类初始化顺序 多态一个简单应用在构造方法中调用多态方法多态与向下转型 问题回答版面向对象面向对象的三大特性是什么&#xff1f;多态特性你是怎…...

Spring 事务失效的几种情况

目录 1. 事务方法不是public 2. 自调用问题 3. 异常处理不当 4. 数据源或事务管理器配置错误 5. 事务传播行为不当 6. 代理方式不正确 7. 事务同步问题 1. 事务方法不是public 在Spring中&#xff0c;默认情况下&#xff0c;只有public方法上的Transactional注解才会被代…...

【Linux 命令操作】如何在 Linux 中使用多行注释呢?

文章目录 1. 给代码进行多行注释2. 给代码取消多行注释 1. 给代码进行多行注释 &#x1f427;① 首先用 vim 打开代码&#xff0c;按 Esc进入命令模式(Normal mode)&#xff1b; &#x1f427;② 然后按住 ctrl v 进入列模式&#xff1b; &#x1f427;③ 再通过按 h(左)、j(…...

【RPC】Dubbo接口测试

关于rpc&#xff0c;推荐看看这篇 &#xff1a; 既然有HTTP协议&#xff0c;为什么还要有RPC 一、Dubbo 是一款alibaba开源的高性能服务框架&#xff1a; 分布式服务框架高性能和透明化的RPC远程服务调用方案SOA服务治理方案 二、Dubbo基础架构 三、 Dubbo接口测试 1、jme…...

PVZ2 植物克僵尸【第二期】

众所周知&#xff0c;PVZ2&#xff08;植物大战僵尸2&#xff09;中有许多恶心的僵尸&#xff0c;而我们不得不派出它们的————克星&#xff01;&#xff08;*为建议方法&#xff09; 5.战机小鬼 战机小鬼&#xff0c;恶心会发射子弹&#xff0c;所以&#xff1a; 1&…...

libcity笔记:libcity/data/batch.py

1 Batch 2 BatchPAD...

【Java EE】多线程(二)Thread 类与常用方法

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…...

AGV无人叉车 | 我们为什么要投资“智慧生产”

AGV 作为一种智能工业车辆机器人&#xff0c;无人叉车充分融合叉车技术和AGV技术&#xff0c;近年来在仓储物流领域的应用逐步扩大。在传统叉车厂商、传统AGV厂商、物流集成商及仓储机器人企业等各方力量推动下&#xff0c;无人叉车市场在竞合中快速发展&#xff0c;并促使无人…...

【C++】滑动窗口:将x减到0的最小操作数

1.题目 2.算法思路 这个题目难在要转化一下才能用滑动窗口。 题意是需要在数组的前后两段区间进行解题&#xff0c;但同时对两段区间进行操作是比较困难的&#xff0c;我们可以将中间这段区间只和与nums_sum-x&#xff08;数组总和-x&#xff09;进行比较&#xff0c;这样就可…...

运动控制“MC_MoveVelocity“功能块详细应用介绍

1、运动控制单位u/s介绍 运动控制单位[u/s]介绍-CSDN博客文章浏览阅读91次。运动控制很多手册上会写这样的单位,这里的u是英文单词unit的缩写,也就是单位的意思,所以这里的单位不是微米/秒,也不是毫米/秒,这里是一个泛指,当我们的单位选择脉冲时,它就是脉冲/秒,也就是…...

9种单片机常用的软件架构

长文预警&#xff0c;加代码5000多字&#xff0c;写了4个多小时&#xff0c;盘软件架构&#xff0c;这篇文章就够了! 可能很多工程师&#xff0c;工作了很多年&#xff0c;都不会有软件架构的概念。 因为我在做研发工程师的第6年&#xff0c;才开始意识到这个东西&#xff0c;在…...

PyQt5中重要的概念:信号与槽

PyQt中信号与槽概念定义如下&#xff08;网络上引用的&#xff09;&#xff1a; 信号&#xff08;signal&#xff09;和槽&#xff08;slot&#xff09;是Qt的核心机制&#xff0c;也是在PyQt编程中对象之间进行通信的机制。在创建事件循环之后&#xff0c;通过建立信号和槽的…...

MacOS快速安装FFmpeg,并使用FFmpeg转换视频

前言&#xff1a;目前正在接入flv视频流&#xff0c;但是没有一个合适的flv视频流地址。网上提供的flv也都不是H264AAC&#xff08;一种视频和音频编解码器组合&#xff09;&#xff0c;所以想通过fmpeg来将flv文件转换为H264AAC。 一、MacOS环境 博主的MacOS环境&#xff08;…...

AIGC 检测怎么识别 ChatGPT 写作指纹?嘎嘎降 AI 帮你 AI 率从 85% 降到 5%

AIGC 检测怎么识别 ChatGPT 写作指纹&#xff1f;嘎嘎降 AI 帮你 AI 率从 85% 降到 5% 很多同学好奇——为什么 ChatGPT 改写论文之后送知网检测 AI 率反而涨了&#xff1f;真相是——ChatGPT 的输出有自己独特的"写作指纹"——AIGC 检测算法早就识别了这种指纹。这篇…...

MASA模组中文汉化包:让技术模组真正为你所用

MASA模组中文汉化包&#xff1a;让技术模组真正为你所用 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为Minecraft技术模组的英文界面而头疼吗&#xff1f;当你在使用Litematica进…...

【亲测免费】 OpenCV 4.5.5 + opencv-contrib-4.5.5 编译所需下载文件说明

OpenCV 4.5.5 opencv-contrib-4.5.5 编译所需下载文件说明 【下载地址】OpenCV4.5.5opencv-contrib-4.5.5编译所需下载文件说明 OpenCV 4.5.5 opencv-contrib-4.5.5 编译所需下载文件说明本仓库提供了编译OpenCV 4.5.5及其贡献模块(opencv-contrib)所需的第三方依赖文件和额外…...

量子安全与后量子密码学:awesome-quantum-software中的加密工具

量子安全与后量子密码学&#xff1a;awesome-quantum-software中的加密工具 【免费下载链接】awesome-quantum-software Curated list of open-source quantum software projects. 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-quantum-software 在后量子计算时…...

Discovery与Kubernetes深度集成:实现容器化微服务注册发现的终极指南

Discovery与Kubernetes深度集成&#xff1a;实现容器化微服务注册发现的终极指南 【免费下载链接】discovery A registry for resilient mid-tier load balancing and failover. 项目地址: https://gitcode.com/gh_mirrors/discov/discovery 在当今云原生时代&#xff0…...

告别手动调试!用西门子STEP7组态软件,5分钟搞定步进电机多段速与正反转控制逻辑

西门子STEP7高效编程&#xff1a;5步构建步进电机智能控制系统 在工业自动化现场&#xff0c;调试步进电机控制逻辑往往是耗时费力的工作——传统方法需要反复修改硬件接线和梯形图程序&#xff0c;每次速度切换或方向调整都可能引发意外停机。而西门子STEP7组态软件提供的结构…...

对比官方直连体验Taotoken在模型调用稳定性上的差异感受

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比官方直连体验Taotoken在模型调用稳定性上的差异感受 作为一名长期与各类大模型API打交道的开发者&#xff0c;我习惯于直接调用…...

从屏幕取词到智能翻译:CuteTranslation如何重塑Linux用户的跨语言工作流

从屏幕取词到智能翻译&#xff1a;CuteTranslation如何重塑Linux用户的跨语言工作流 【免费下载链接】CuteTranslation Linux屏幕取词翻译软件 项目地址: https://gitcode.com/gh_mirrors/cu/CuteTranslation 在Linux生态系统中&#xff0c;多语言处理一直是个技术痛点—…...

你的STM32调试信息用对了吗?深入对比.axf文件与addr2line.exe的配合之道

STM32调试进阶&#xff1a;解密.axf文件与addr2line的黄金组合 调试嵌入式系统时&#xff0c;最令人沮丧的莫过于设备突然崩溃&#xff0c;而你却对问题源头一无所知。作为一名长期与STM32打交道的开发者&#xff0c;我经历过无数次这样的时刻&#xff0c;直到真正理解了调试信…...

全志V853开发板适配7寸RGB屏:Linux DRM驱动与设备树配置实战

1. 项目概述与核心价值最近在折腾百问网的100ASK_V853-PRO开发板&#xff0c;这块板子用的是全志V853这颗高性能的AIoT芯片&#xff0c;本身接口资源挺丰富的。但官方默认的配套屏幕是5寸或者更小的MIPI屏&#xff0c;对于很多需要大屏交互的应用场景&#xff0c;比如智能中控、…...