面试题(多线程按顺序输出)

【面试题(多线程按顺序输出)】最近遇到一个题目:编写一个程序,开启 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问题
一道面试题:多个线程按顺序输出

    推荐阅读