严格按顺序打印线程

时间:2011-09-11 12:08:25

标签: java multithreading

我正在尝试按特定顺序打印线程。所以我有一个启动10个线程的main方法。我需要按以下顺序打印:

主线程已启动

线程0开始了 线程1开始了 。 。 线程9开始

线程0完成 线程1完成 。 。 。 线程9完成

主线程已完成

我尝试过使用join()方法,其中主线程在每个线程启动和完成后加入。

这只能解决问题的一半。我还需要打印每个线程的开始,然后完成每个新线程。

任何建议。

1 个答案:

答案 0 :(得分:2)

你不需要任何同步结构(这是一个要求吗?我认为应该让它更有趣)。你可以这样做:

public class ThreadOrder {

    public static class WaitingForMyTurn extends Thread {

        private static volatile Integer currentNumber = 1;
        private Integer myNumber;

        public WaitingForMyTurn(Integer number) {
            this.myNumber = number;
        }

        public void run() {
            while (currentNumber < myNumber) {
            }
            System.out.println(myNumber);
            currentNumber = myNumber + 1;
        }
    }

    public static void main(String[] args) {

        for (int i = 0; i < 10; i++) {
            new WaitingForMyTurn(i).start();
        }
    }
}

编辑:使currentNumber不稳定