Thread如何在java中运行?

时间:2013-05-13 14:06:52

标签: java

我用Java编写了这段代码,但我无法理解为什么输出不是我所期望的。

有人可以解释为什么苹果和橘子混乱,并且它们没有逐一列出?

package first_experiment;

class Orange extends Thread{

    public void run (){  
        for ( int i=1 ; i<21 ; i++)
            System.out.println( i + " - Orange");
    }
}

class Apple extends Thread{

    public void run(){
        for (int i =1 ; i <11 ; i++)
            System.out.println( i + " - Apple");
    }
}

public class one{
    public static void main (String args[]){
        Thread O = new Orange();
        Thread A = new Apple();

        O.start();
        A.start();
    }
}

6 个答案:

答案 0 :(得分:5)

两个线程同时运行。由JVM决定打印出来的订单,并且您不能依赖于可预测的订单。

答案 1 :(得分:1)

您正在创建两个并发运行的线程。执行顺序未知(因为两者具有相同的优先级)。请注意,如果PrintStream#println()未同步,则输出将类似于:

12 - - A ppOranlgee
// and so on

答案 2 :(得分:0)

如果希望结果以特定顺序出现,请在循环中使用一个线程。

如果您使用多个线程,则希望它们以尽可能多的顺序启动和运行。

你的线程如此短暂,它们在另一个线程开始之前就已经完成了。

顺便说一句:你的PC可以在你眨眼时执行100,000,000次操作,并且启动一个新线程需要时间。

答案 3 :(得分:0)

线程作为单独和不间断的执行流运行。在第一个Orange获得一些CPU时间之前,您可能会遍历几个Apples。此外,如果您使用的是多处理器系统,则两者都可以运行得很顺畅。

如果希望它们协调输出,则需要使用wait()和notify()。

答案 4 :(得分:0)

java中的线程是在启动时独立运行的进程,一行启动的线程代码一次执行,线程之间没有特定的执行顺序。 以上代码将以控制台计数显示 - 橙色和计数 - Apple随机显示。

答案 5 :(得分:-1)

线程可以以任何顺序启动,但结果会混乱,因为System.out.println会同步Thread访问它,然后一个接一个地执行打印。

要查看真正的随机输出,请将数据保存在List中,然后再打印List的内容。