我用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();
}
}
答案 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的内容。