news 2026/3/8 3:29:36

使用三个线程按顺序打印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/3/5 16:58:37

基于最小二乘支持向量机(LSSVM)的手写字母识别Matlab代码之旅

基于最小二乘支持向量机(LSSVM)的手写字母识别 matlab代码在模式识别领域&#xff0c;手写字母识别一直是个有趣且具有挑战性的课题。最小二乘支持向量机&#xff08;LSSVM&#xff09;作为支持向量机&#xff08;SVM&#xff09;的一种改进形式&#xff0c;在这类问题上展现出…

作者头像 李华
网站建设 2026/3/4 7:09:52

Java语言提供了八种基本类型。六种数字类型【函数英特12】

变量就是申请内存来存储值。也就是说&#xff0c;当创建变量的时候&#xff0c;需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间&#xff0c;分配的空间只能用来储存该类型数据。 因此&#xff0c;通过定义不同类型的变量&#xff0c;可以在内存中储存整…

作者头像 李华
网站建设 2026/3/4 19:27:10

即时通讯项目--UserService

功能设计功能模块示意图接口实现流程1. 用户注册从请求中取出昵称和密码&#xff1b;检查昵称是否合法&#xff08;仅包含字母、数字、连字符-、下划线_&#xff0c;长度限制 3~15 位&#xff09;&#xff1b;检查密码是否合法&#xff08;仅包含字母、数字&#xff0c;长度限制…

作者头像 李华