繁体   English   中英

线程如何在Java中工作?

[英]How Thread works in 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();
    }
}

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

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

12 - - A ppOranlgee
// and so on

如果希望结果按特定顺序显示,请循环使用一个线程。

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

您的线程寿命很短,它们在另一个线程可以启动之前就已运行完毕。

顺便说一句:您的PC可以在眨眼的时间内执行100,000,000次操作,而启动新线程需要花费时间。

线程作为独立的独立执行流运行。 在第一个Orange获得一些CPU时间之前,您可能会循环浏览多个Apple。 同样,如果您使用的是多处理器系统,则两者可能会同时运行。

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

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

线程可以以任何顺序启动,但是结果会混乱,因为System.out.println同步了对其的线程访问,因此,它们随后被依次执行以进行打印。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM