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

交替输出

交替输出

题目:线程 1 输出 a 5 次,线程 2 输出 b 5 次,线程 3 输出 c 5 次。现在要求输出 abcabcabcabcabc

wait notify 版

public class SyncWaitNotify {private volatile int flag;private volatile int loopNumber;public SyncWaitNotify(int flag,int loopNumber){this.flag = flag;this.loopNumber = loopNumber;}public void print(int flag,int next,String str){for(int i=0;i<loopNumber;i++){synchronized (this){while (this.flag != flag){try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.print(str);this.flag = next;this.notifyAll();}}}public static void main(String[] args) {SyncWaitNotify syncWaitNotify = new SyncWaitNotify(1,5);new Thread(() -> {syncWaitNotify.print(1,2,"a");}).start();new Thread(() -> {syncWaitNotify.print(2,3,"b");}).start();new Thread(() -> {syncWaitNotify.print(3,1,"c");}).start();}
}

Lock 条件变量版

public class AwaitSignal extends ReentrantLock {private volatile int loopNumber;public AwaitSignal(int loopNumber) {this.loopNumber = loopNumber;}public void print(Condition condition,Condition next,String str){for(int i=0;i<loopNumber;i++){this.lock();try {try {condition.await();System.out.print(str);next.signal();} catch (InterruptedException e) {e.printStackTrace();}} finally {this.unlock();}}}public void start(Condition condition){this.lock();try {condition.signal();} finally {this.unlock();}}public static void main(String[] args) {AwaitSignal awaitSignal = new AwaitSignal(5);Condition aWait = awaitSignal.newCondition();Condition bWait = awaitSignal.newCondition();Condition cWait = awaitSignal.newCondition();new Thread(() -> {awaitSignal.print(aWait,bWait,"a");}).start();new Thread(() -> {awaitSignal.print(bWait,cWait,"b");}).start();new Thread(() -> {awaitSignal.print(cWait,aWait,"c");}).start();awaitSignal.start(aWait);}
}

Park Unpark 版

public class SyncPark {private int loopNumber;public Thread[] threads;public SyncPark(int loopNumber){this.loopNumber = loopNumber;}public void print(int next,String str){for(int i=0;i<loopNumber;i++){LockSupport.park();System.out.print(str);LockSupport.unpark(threads[next]);}}public void start(Thread thread){LockSupport.unpark(thread);}public static void main(String[] args) {SyncPark syncPark = new SyncPark(5);Thread t1 = new Thread(() -> {syncPark.print(1, "a");}, "t1");Thread t2 = new Thread(() -> {syncPark.print(2, "b");}, "t2");Thread t3 = new Thread(() -> {syncPark.print(0, "c");}, "t3");syncPark.threads = new Thread[]{t1,t2,t3};t1.start();t2.start();t3.start();syncPark.start(t1);}
}

相关文章:

交替输出

交替输出 题目&#xff1a;线程 1 输出 a 5 次&#xff0c;线程 2 输出 b 5 次&#xff0c;线程 3 输出 c 5 次。现在要求输出 abcabcabcabcabc wait notify 版 public class SyncWaitNotify {private volatile int flag;private volatile int loopNumber;public SyncWaitNo…...

JS(三)——更改html内数据

获取 DOM 元素&#xff0c;然后修改其属性或内容。使用 getElementById 方法获取特定 ID 的元素&#xff1a; <p id"myParagraph">这是初始的文本</p> const paragraph document.getElementById(myParagraph); paragraph.innerHTML 这是修改后的文本…...

CSS小玩意儿:文字适配背景

一&#xff0c;效果 二&#xff0c;代码 1&#xff0c;搭个框架 添加一张背景图片&#xff0c;在图片中显示一行文字。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" conte…...

C++:平衡二叉搜索树之红黑树

一、红黑树的概念 红黑树&#xff0c; 和AVL都是二叉搜索树&#xff0c; 红黑树通过在每个节点上增加一个储存位表示节点的颜色&#xff0c; 可以是RED或者BLACK&#xff0c; 通过任何一条从根到叶子的路径上各个节点着色方式的限制&#xff0c;红黑树能够确保没有一条路径会比…...

CentOS 7 系统优化

CentOS 7 系统优化 1、配置YUM源 阿里云的YUM源配置&#xff1a; CentOS 7使用以下命令&#xff1a; sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoCentOS 8使用以下命令&#xff1a; sudo wget -O /etc/yum.repos.d/CentOS…...

扫雷游戏——附源代码

扫雷游戏的源代码比较简单&#xff0c;不设计比较复杂的代码&#xff0c;主要是多个函数的组合&#xff0c;每个函数执行自己的功能&#xff0c;最终支持游戏的完成。 1.菜单 我们需要一个提醒信息来让用户进行选择。 void menu() {printf("***********************\n&…...

Vue3列表(List)

效果如下图&#xff1a;在线预览 APIs List 参数说明类型默认值bordered是否展示边框booleanfalsevertical是否使用竖直样式booleanfalsesplit是否展示分割线booleantruesize列表尺寸‘small’ | ‘middle’ | ‘large’‘middle’loading是否加载中booleanfalsehoverable是否…...

HarmonyOS NEXT - Navigation组件封装BaseNavigation

demo 地址: https://github.com/iotjin/JhHarmonyDemo 代码不定时更新&#xff0c;请前往github查看最新代码 在demo中这些组件和工具类都通过module实现了&#xff0c;具体可以参考HarmonyOS NEXT - 通过 module 模块化引用公共组件和utils 官方介绍 组件导航 (Navigation)(推…...

浅看MySQL数据库

有这么一句话&#xff1a;“一个不会数据库的程序员不是合格的程序员”。有点夸张&#xff0c;但是确是如此。透彻学习数据库是要学习好多知识&#xff0c;需要学的东西也是偏难的。我们今天来看数据库MySQL的一些简单基础东西&#xff0c;跟着小编一起来看一下吧。 什么是数据…...

Pytorch常用训练套路框架(CPU)

文章目录 1. 数据准备示例&#xff1a;加载 CIFAR-10 数据集 2. 模型定义示例&#xff1a;定义一个简单的卷积神经网络 3. 损失函数和优化器示例&#xff1a;定义损失函数和优化器 4. 训练循环示例&#xff1a;训练循环 5. 评估和测试示例&#xff1a;评估模型 6. 保存和加载模…...

C++ | Leetcode C++题解之第338题比特位计数

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> countBits(int n) {vector<int> bits(n 1);for (int i 1; i < n; i) {bits[i] bits[i & (i - 1)] 1;}return bits;} };...

智慧校园云平台电子班牌系统源码,智慧教育一体化云解决方案

智慧校园云平台电子班牌系统&#xff0c;利用先进的云计算技术&#xff0c;将教育信息化资源和教学管理系统进行有效整合&#xff0c;实现生态基础数据共享、应用生态统一管理&#xff0c;为智慧教育建设的统一性&#xff0c;稳定性&#xff0c;可扩展性&#xff0c;互通性提供…...

数据库系统 第17节 数据仓库 案例赏析

下面我将通过几个具体的案例来说明数据仓库如何在不同的行业中发挥作用&#xff0c;并解决实际业务问题。 案例 1: 零售业 背景: 一家大型零售商希望改进其库存管理和市场营销策略&#xff0c;以提高销售额和顾客满意度。 解决方案: 数据仓库: 构建一个数据仓库&#xff0…...

硬件面试经典 100 题(71~90 题)

71、请问下图电路的作用是什么&#xff1f; 该电路实现 IIC 信号的电平转换&#xff08;3.3V 和 5V 电平转换&#xff09;&#xff0c;并且是双向通信的。 上下两路是一样的&#xff0c;只分析 SDA 一路&#xff1a; 1&#xff09; 从左到右通信&#xff08;SDA2 为输入状态&…...

【git】代理相关

问题&#xff1a; 开启了翻墙代理工具&#xff0c;拉取代码时报错&#xff1a;fatal: 无法访问 xxxx : Failed to connect to github.com port 443: 连接超时 解决&#xff1a; 0&#xff0c;取消代理仍然无法拉取 1&#xff0c;查看控制面板-网络与Internet-代理&#xff…...

golang gin框架中创建自定义中间件的2种方式总结 - func(*gin.Context)方式和闭包函数方式定义gin中间件

在gin框架中&#xff0c;我们可以通过2种方式创建自定义中间件&#xff1a; 1. 直接定义一个类型为 func(*gin.Context)的函数或者方法 这种方式是我们常用的方式&#xff0c;也就是定义一个参数为*gin.Context的函数或者方法。定义的方法就是创建一个 参数类型为 gin.Handler…...

Linux高级编程 8.13 文件IO

一、文件IO 操作系统为了方便用户使用系统功能而对外提供的一组系统函数。称之为 系统调用&#xff08;unistd.h&#xff09; 其中有个 文件IO&#xff0c;一般都是对设备文件操作,当然也可以对普通文件进行操作。 这是一个基于Linux内核的没有缓存的IO机制 文件IO特性&…...

【k8s】ubuntu18.04 containerd 手动从1.7.15 换为1.7.20

ubutnu18.04之前手动安装了1.7.15现在下载1.7.20containerd-1.7.20-linux-amd64.tar.gz root@k8s-worker-i58265u:/home/zhangbin# root@k8s-worker-i58265u:/home/zhangbin# https://github.com/containerd/containerd/releases/download/v1.7.20/containerd-1.7.20-linux-am…...

常用浮动方式

目录 一、标准流 二、float浮动 三、 flex浮动 3.1flex组成 3.2 主轴对齐方式 3.3侧轴对齐方式 3.4修改主轴方向 3.5弹性盒子换行 3.6行对齐方式 一、标准流 标签在网页中的默认排布规则 例如&#xff1a; 块元素独占一行、行内元素可以一行显示多个 二、float浮动 让块…...

设计模式反模式:UML常见误用案例分析

文章目录 设计模式反模式&#xff1a;UML常见误用案例分析1. 反模式概述2. 反模式的 UML 图示误用2.1 God Object 反模式2.2 Spaghetti Code 反模式2.3 Golden Hammer 反模式2.4 Poltergeist 反模式 3. 总结 设计模式反模式&#xff1a;UML常见误用案例分析 在软件工程领域&am…...

从零开始:OCAT图形化配置工具让OpenCore黑苹果安装变得简单

从零开始&#xff1a;OCAT图形化配置工具让OpenCore黑苹果安装变得简单 【免费下载链接】OCAuxiliaryTools Cross-platform GUI management tools for OpenCore&#xff08;OCAT&#xff09; 项目地址: https://gitcode.com/gh_mirrors/oc/OCAuxiliaryTools 还在为复杂的…...

OpenClaw备份恢复指南:ollama-QwQ-32B模型与技能迁移方案

OpenClaw备份恢复指南&#xff1a;ollama-QwQ-32B模型与技能迁移方案 1. 为什么需要备份恢复方案 上周我的主力开发机突然硬盘故障&#xff0c;导致整个OpenClaw环境丢失。最痛苦的不是重装软件&#xff0c;而是那些精心调教过的技能配置和任务历史记录全部归零。这次经历让我…...

从PTA天梯赛L1真题看起:新手如何用C++快速搞定编程竞赛里的“送分题”?

从PTA天梯赛L1真题看起&#xff1a;新手如何用C快速搞定编程竞赛里的“送分题”&#xff1f; 第一次参加编程竞赛的新手&#xff0c;面对屏幕上密密麻麻的题目&#xff0c;往往会感到无从下手。但仔细观察历届PTA天梯赛L1级别的题目&#xff0c;你会发现一个有趣的现象——总有…...

从抓包到反编译:wx小程序逆向实战全记录(含云函数分析)

从抓包到反编译&#xff1a;小程序逆向工程深度解析与技术实践 在移动互联网时代&#xff0c;小程序以其轻量化和便捷性迅速占领市场&#xff0c;而作为开发者&#xff0c;理解小程序背后的运行机制不仅能提升开发能力&#xff0c;更能帮助进行安全审计和性能优化。本文将带您深…...

智能体架构的创新突破:Agent-S框架的技术解析与实战应用

智能体架构的创新突破&#xff1a;Agent-S框架的技术解析与实战应用 【免费下载链接】Agent-S Agent S: an open agentic framework that uses computers like a human 项目地址: https://gitcode.com/GitHub_Trending/ag/Agent-S Agent-S作为开源的智能体框架&#xff…...

简单三步上手:bilibili-parse视频解析工具完整指南

简单三步上手&#xff1a;bilibili-parse视频解析工具完整指南 【免费下载链接】bilibili-parse bilibili Video API 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse 还在为无法离线观看B站视频而烦恼吗&#xff1f;bilibili-parse是一个强大的B站视频解析…...

探索CLIP-ViT-H-14:5大突破重新定义多模态AI应用

探索CLIP-ViT-H-14&#xff1a;5大突破重新定义多模态AI应用 【免费下载链接】CLIP-ViT-H-14-laion2B-s32B-b79K 项目地址: https://ai.gitcode.com/hf_mirrors/laion/CLIP-ViT-H-14-laion2B-s32B-b79K 你是否想过让计算机像人类一样同时理解图像和文字&#xff1f;CLI…...

LFM2.5-GGUF开源模型部署指南:适配消费级GPU的高性能文本生成方案

LFM2.5-GGUF开源模型部署指南&#xff1a;适配消费级GPU的高性能文本生成方案 1. 平台介绍 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型&#xff0c;专为消费级GPU环境优化设计。这个1.2B参数的模型采用GGUF格式&#xff0c;能够在资源有限的设备上高效运…...

动态生成展示:LiuJuan20260223Zimage模型根据实时天气创作“风晴雨雪”主题画

动态生成展示&#xff1a;LiuJuan20260223Zimage模型根据实时天气创作“风晴雨雪”主题画 你有没有想过&#xff0c;家里的数字画框或者手机壁纸&#xff0c;能像有生命一样&#xff0c;随着窗外的天气实时变化&#xff1f;今天&#xff0c;我就带你体验一个特别有意思的玩法&…...

Wemod-Patcher:开源工具实现WeMod功能增强的完整方案

Wemod-Patcher&#xff1a;开源工具实现WeMod功能增强的完整方案 【免费下载链接】Wemod-Patcher WeMod patcher allows you to get some WeMod Pro features absolutely free 项目地址: https://gitcode.com/gh_mirrors/we/Wemod-Patcher 在游戏体验优化领域&#xff0…...