今天遇到一个面试题,
三个线程ABC依次循环打印1到100
面试的时候没写出来,回来想了想
public class Main {
public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(new MyRunnable(1));
t1.setName("ta");
Thread t2 = new Thread(new MyRunnable(2));
t2.setName("tb");
Thread t3 = new Thread(new MyRunnable(0));
t3.setName("tc");
t1.start();
t2.start();
t3.start();
}
}class MyRunnable implements Runnable {
private int a;
private static final Object o = new Object();
private static volatile int i = 1;
MyRunnable(int a) {
this.a = a;
}
@Override
public void run() {
synchronized (o) {
while (i <= 100) {
if (i % 3 == a) {
System.out.println(Thread.currentThread().getName() + "--" + (i++));
o.notifyAll();
} else {
try {
o.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
【多线程依次打印】
推荐阅读
- 数组的排序算法
- 学习|Python学习心得,小白初学工具推荐
- jQuery---用jq实现控件的显示和隐藏
- 使一个布局中的所有事件失效
- 学习|python3打印菱形(测试过)
- 学习|自定义圆形progressbar(包含进度动画效果)
- Android|Android 实现 圆形进度对话框 和 水平进度对话框 —— ProgressDialog
- 多人合作项目使用Git进行代码控制
- 并发|11.防刷限流
- android|动态设置Progress值和颜色