多线程打印程序 3382019835830

发布时间 2024-01-04 19:42:18作者: guoyu1

。。。

public class Printer {
    public static class PrinterThread extends Thread {
        static boolean[] candidate = new boolean[10];
        int num;

        public PrinterThread(int num) {
            this.num = num;
        }

        @Override
        public void run() {
            while (true) {
                synchronized (PrinterThread.candidate) {
                    while (candidate[num] == false) {
                        try {
                            candidate.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    System.out.println(num);
                    candidate[num] = false;
                    candidate.notifyAll();
                }
            }
        }
    }

    public static class Test {
        public static void main(String[] args) throws InterruptedException {
            int[] nums = {3, 3, 8, 2, 0, 1, 9, 8, 3, 5, 8, 3, 0};
            for (int i = 0; i < 10; i++) {
                new PrinterThread(i).start();
            }

            for (int i = 0; i < nums.length; i++) {
                synchronized (PrinterThread.candidate) {
                    PrinterThread.candidate[nums[i]] = true;
                    PrinterThread.candidate.notifyAll();
                    PrinterThread.candidate.wait();
                }
            }
        }
    }
}

。。。