【面试题(多线程按顺序输出)】最近遇到一个题目:编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC……
当时很懵逼,不知道咋解,看来还是对线程和锁的理解不是很深刻。
public class MultiLockDemo {
/**
* 使用公平锁,防止一个线程连续获取锁的情况
*/
private Lock lock = new ReentrantLock(true);
// 计数
private int COUNT = 0;
// 循环次数
private int LOOP_NUM = 10;
// 计数取模
private int MOD = 3;
private void printChar(int threadIdentify) {
for (int i = 0;
i < LOOP_NUM;
) {
lock.lock();
try {
/**
* threadIdentify: 0 表示线程 a, 1 表示线程 b, 2 表示线程 c
*/
if (COUNT % MOD == threadIdentify) {
System.out.print(Thread.currentThread().getName());
COUNT++;
i++;
}
} finally {
lock.unlock();
}
}
}public static void main(String[] args) {
MultiLockDemo lockDemo = new MultiLockDemo();
Thread a = new Thread(() -> lockDemo.printChar(0), "A");
Thread b = new Thread(() -> lockDemo.printChar(1), "B");
Thread c = new Thread(() -> lockDemo.printChar(2), "C");
a.start();
b.start();
c.start();
}
}
参考:java多线程顺序执行并顺序输出ABC问题
一道面试题:多个线程按顺序输出
推荐阅读
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- linux笔记|linux 常用命令汇总(面向面试)
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 面试|我经历的IT公司面试及离职感受(转)
- android-面试|我经历的IT公司面试及离职感受
- Java|一个月内面了30家企业,不断对比薪资,我从18K变成了38K
- vue|Vue面试常用详细总结
- java人生|35K 入职华为Java开发那天,我哭了(这 5 个月做的一切都值了)
- Android|年后备战金三银四(Android面试吃透这一篇就没有拿不到的offer......)
- java|后悔没有早点遇到它 , 直接从 12K 涨到了 30K