问题描述 【Java多线程 循环打印ABC 10次】Java多线程,循环打印”ABC”10次。
代码
public class printABC {private static int state = 0;
public static void main(String[] args) {final printABC t = new printABC();
Thread A = new Thread(new Runnable() {public synchronized void run() {// 设定打印10次
for (int i = 0;
i < 10;
i++) {
synchronized (t) {// 如果不满足A的打印条件,则调用wait,一直阻塞
while (state % 3 != 0) {
try {
t.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}// 执行到这里,表明满足条件,打印A,设置state
// 调用notifyAll方法
System.out.println("A");
state++;
t.notifyAll();
}
}}
});
Thread B = new Thread(new Runnable() {public synchronized void run() {
for (int i = 0;
i < 10;
i++) {
synchronized (t) {
while (state % 3 != 1) {
try {
t.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("B");
state++;
t.notifyAll();
}
}}
});
Thread C = new Thread(new Runnable() {public synchronized void run() {
for (int i = 0;
i < 10;
i++) {
synchronized (t) {
while (state % 3 != 2) {
try {
t.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("C");
state++;
t.notifyAll();
}
}}
});
A.start();
B.start();
C.start();
}
}
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)