news 2026/7/13 12:36:56

使用三个线程按顺序打印ABC,循环打印10次

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用三个线程按顺序打印ABC,循环打印10次

记录一道常用的线程调度算法题

实现如下:

public class PrintABC {
private static final int MAX_PRINT_COUNT = 10; // 循环打印次数
private static int state = 0; // 线程状态,0表示打印A,1表示打印B,2表示打印C

public static void main(String[] args) {
Object lock = new Object();

Thread threadA = new Thread(() -> {
for (int i = 0; i < MAX_PRINT_COUNT; i++) {
synchronized (lock) {
while (state % 3 != 0) { // 轮到A打印
try {
lock.wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.print("A");
state++;
lock.notifyAll();
}
}
});

Thread threadB = new Thread(() -> {
for (int i = 0; i < MAX_PRINT_COUNT; i++) {
synchronized (lock) {
while (state % 3 != 1) { // 轮到B打印
try {
lock.wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.print("B");
state++;
lock.notifyAll();
}
}
});

Thread threadC = new Thread(() -> {
for (int i = 0; i < MAX_PRINT_COUNT; i++) {
synchronized (lock) {
while (state % 3 != 2) { // 轮到C打印
try {
lock.wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.print("C");
state++;
lock.notifyAll();
}
}
});

// 启动三个线程
threadA.start();
threadB.start();
threadC.start();
}
}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/30 5:43:21

基于深度学习YOLOv12的食物检测系统(YOLOv12+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

一、项目介绍 本文介绍了一个基于YOLOv12深度学习模型的食品检测系统&#xff0c;该系统能够识别30类常见食物和饮料。系统采用先进的YOLOv12目标检测算法&#xff0c;配合精心构建的食品数据集&#xff0c;实现了高效的食品识别功能。项目包含完整的Python实现代码、预训练模型…

作者头像 李华
网站建设 2026/7/12 2:39:14

基于深度学习YOLOv12的花生种子霉变识别检测系统(YOLOv12+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

一、项目介绍 本研究开发了一套基于最新YOLOv12深度学习算法的花生种子霉变检测系统&#xff0c;实现了对花生种子霉变情况的快速、准确识别。系统采用先进的计算机视觉技术&#xff0c;能够高效区分"霉变"和"未霉变"两类花生种子。项目包含完整的Python实…

作者头像 李华
网站建设 2026/7/9 12:34:00

安装Mosquitto

用于MQTT私有云架设的服务器端和客户端的核心代码。 稳定支持断线自动重连。公网服务器&#xff0c;内网内网服务器或者租赁腾讯轻服务器均可架设。 实现MQTT通信和数据存储。最近在折腾MQTT私有云的架设&#xff0c;感觉这玩意儿挺有意思的。MQTT&#xff08;Message Queuing …

作者头像 李华
网站建设 2026/7/1 20:19:35

STL——集合 set

stl的容器较多&#xff0c;开始学习的时候主要聚焦于常用的&#xff0c;最近发现set其实也有很多实用的方法 set 家族主要有set, multiset, unordered_set, unordered_multiset 前置通用知识 关联式容器&#xff1a;不以 “下标” 访问元素&#xff0c;而是通过 “元素值” 建…

作者头像 李华