Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在下面的代码中,当我多次编译或运行它时,输出是不同的 类名实现可运行{ 公开募捐{ 对于(int x=1;x_Java_Multithreading - Fatal编程技术网

Java 为什么在下面的代码中,当我多次编译或运行它时,输出是不同的 类名实现可运行{ 公开募捐{ 对于(int x=1;x

Java 为什么在下面的代码中,当我多次编译或运行它时,输出是不同的 类名实现可运行{ 公开募捐{ 对于(int x=1;x,java,multithreading,Java,Multithreading,它应该显示相同的输出,但每次运行的顺序可能不同 您有三个独立的线程:每个线程都将以明显的顺序显示三行输出-但无法保证哪个线程将首先执行,等等。在这种特殊情况下,我不相信您有任何副作用会导致真正奇怪的行为-只是正常的模糊性,哪些线程将在何时运行。请注意,在多核处理器线程可能同时运行-唯一的同步是系统内发生的任何事情。out.println其中一个线程将首先开始运行,然后是第二个线程,最后是第三个线程。这取决于系统上的线程调度程序。第一个线程完成后,第二个线程将无法运行他说。所有三个线程都可以并行运

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


您有三个独立的线程:每个线程都将以明显的顺序显示三行输出-但无法保证哪个线程将首先执行,等等。在这种特殊情况下,我不相信您有任何副作用会导致真正奇怪的行为-只是正常的模糊性,哪些线程将在何时运行。请注意,在多核处理器线程可能同时运行-唯一的同步是
系统内发生的任何事情。out.println
其中一个线程将首先开始运行,然后是第二个线程,最后是第三个线程。这取决于系统上的线程调度程序。第一个线程完成后,第二个线程将无法运行他说。所有三个线程都可以并行运行。我知道,但我不是说完成所有处理,而是指完成它的执行时间,然后调度程序选择另一个线程来工作。半并行的线程不是真正的并行处理。这取决于你有多少内核。如果你使用的是一台具有多个处理器的机器,它们很可能会正在使用“真正的并行处理”。您可能希望编辑您的答案以使其更清晰…您能描述一下您的系统有多少处理器/内核吗?您能展示几个示例输出吗?
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();
    }
}