一道面试题来了解线程notifyAll()和wait()的方法
2024-09-25 22:45:03
题目:三个线程,分别打印A、B、C,要求按ABC的顺序循环打印10次。
package com.slowcity.crud.controller; public class PrintOneTwoThree {
public static void main(String[] args) {
Print p1 = new Print(0);
Print p2 = new Print(1);
Print p3 = new Print(2); new Thread(p1, "p1").start();
new Thread(p2, "p2").start();
new Thread(p3, "p3").start(); while (Thread.activeCount() > 1);
System.out.println("Done!");
}
} class Print implements Runnable {
private static int state = 0;
private int id;
private static Object lock = new Object(); public Print(int id) {
this.id = id;
} @Override
public void run() {
synchronized (lock) {
while (state < 30) {
if (state % 3 == id) {
switch (id) {
case 0:
System.out.println("["
+ Thread.currentThread().getName() + "]" + "A");
break; case 1:
System.out.println("["
+ Thread.currentThread().getName() + "]" + "B");
break; case 2:
System.out.println("["
+ Thread.currentThread().getName() + "]" + "C");
break; default:
break;
}
state++;
lock.notifyAll();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
最新文章
- js抛物线动画——加入购物车动效
- json转换成对象
- Java帮助文档的生成
- GDB调试笔记
- SPRING IN ACTION 第4版笔记-第九章Securing web applications-003-把用户数据存在数据库
- useradd adduser linux创建用户、设置密码、修改用户、删除用户
- R-note1
- Java面试题之四
- UVa202 Repeating Decimals
- Mac OS X窗口最小化方法的几个快捷键
- Notepad++的正则表达式替换和替换
- 王垠:我和Google的故事
- 关于redis数据库的简单思考
- TeamViewer 密码有关
- bootstrapValidator操作
- 将Windows系统移到另一个硬盘
- 为什么一定要学习linux系统?
- CF 1138F 超级有意思的一道交互题QVQ
- 【发布iCore3&;iCore4ADM资料】
- if语句题目练习