インタビューの質問:順番にマルチスレッド出力

最近問題が発生しました。プログラムを作成して3つのスレッドを開始します。これら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質問のシーケンシャル出力
インタビュー質問:複数のスレッドが順番に出力

おすすめ

転載: blog.csdn.net/jiaobuchong/article/details/86555208