为什么在下面的代码中,当我多次编译或运行它时,输出是不同的

时间:2010-04-03 11:24:32

标签: java multithreading

class Name implements Runnable {
    public void run() {
        for (int x = 1; x <= 3; x++) {
            System.out.println("Run by "
                               + Thread.currentThread().getName()
                               + ", x is " + x);
        }
    }
}
public class Threadtest {
    public static void main(String [] args) {
        // Make one Runnable
        Name nr = new Name();
        Thread one = new Thread(nr);
        Thread two = new Thread(nr);
        Thread three = new Thread(nr);
        one.setName("A");
        two.setName("B");
        three.setName("C");
        one.start();
        two.start();
        three.start();
    }
}

答案是不同的,编译和运行超过一次我不知道为什么?任何的想法。

2 个答案:

答案 0 :(得分:7)

它应该显示相同的输出,但每次运行可能会以不同的顺序显示。

你有三个独立的线程:每个都会以明显的顺序显示三行输出 - 但是不能保证哪个线程会先执行,等等。在这种特殊情况下我不相信你有任何线程副作用会导致真正奇怪的行为 - 只是正常模糊的线程将在何时运行。请注意,在多核处理器上,线程可能同时运行 - 唯一的同步是在System.out.println内发生的任何事情。

答案 1 :(得分:1)

其中一个将首先开始运行,然后是第二个,最后是第三个。这取决于系统上的线程调度程序