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();
}
}