Java使用volatile实现多线程输出ABC共10次

时间:2025-04-04 19:07:37

问题

有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C。要求,同时启动三个线程, 按顺序输出ABC, 循环10次。

今天在写多线程的时候找例子,见到了这样一个题,觉得不难,但是在网上没有看见用volatile实现的,于是自己写一下记录下来。

代码

public class Main {

    public static void main(String[] args) throws InterruptedException {
        // write your code here
        for (int i = 0; i < Test.ARRAY.length; i++) {
            new Test.OutputThread(i).start();
        }
    }
}
class Test {

    public static final String[] ARRAY = {"A", "B", "C"};

    private static volatile int index = 0;
    private static volatile int count = 0;

    static class OutputThread extends Thread {
        int num;

        OutputThread(final int num) {
            this.num = num;
        }

        @Override
        public void run() {
            while (count < 10) { //更改输出ABC的次数
                if (index != num) {
                    continue;
                }
                System.out.print(ARRAY[index]);
                count += (index + 1) / ARRAY.length; //这里可以换成if判断后+1
                index = (index + 1) % ARRAY.length;
            }
        }
    }
}