java - 为什么每次运行这个程序输出的顺序都不一样?

标签 java multithreading operating-system

为什么每次运行这个程序输出的顺序都不一样?是否由于多个线程同时尝试访问共享资源。因此,线程的执行方式将是随机的吗?

我的输出

java MyThreadExample 来自线程 1 的问候 来自线程 3 的问候 来自线程 4 的问候 来自线程 2 的问候

java MyThreadExample 来自线程 1 的问候 来自线程 3 的问候 来自线程 2 的问候 来自线程 4 的问候

java MyThreadExample
Hello from thread 1
Hello from thread 4
Hello from thread 3
Hello from thread 2

代码:

import java.io.*;
import java.lang.*;

class MyThreadExample {

public static void main(String[] args) {
   HelloThread ht1 = new HelloThread(1);
   HelloThread ht2 = new HelloThread(2);
   HelloThread ht3 = new HelloThread(3);
   HelloThread ht4 = new HelloThread(4);
   ht1.start();
   ht2.start();
   ht3.start();
   ht4.start();
   }
}

class HelloThread extends Thread {
    int threadID;

    HelloThread(int threadID) {
    this.threadID = threadID;
    }

    public void run() {
    System.out.println("Hello from thread " + this.threadID);
    }
} // end Thread

最佳答案

您完全正确,那是因为多线程。

您启动了 4 个线程,每个线程都独立运行 - 它们之间没有逻辑顺序,因此它们中的任何一个都可能先完成,也可能最后完成。您观察到的顺序完全是随机的,并且可能会不时发生变化。

“是否由于多个线程同时尝试访问共享资源。”这在上下文中实际上是无关紧要的,因为它们之间确实没有共享资源。

关于java - 为什么每次运行这个程序输出的顺序都不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26317820/

相关文章:

java - boolean 值总是返回 true

python - UDP 服务器线程化

java - Socket和Thread,这段代码是做什么的?

python - 根据名称中的某些值动态创建目录和文件

python - 保证在进程终止时调用销毁

c - 使用 lseek 时不打印第一个字节

JavaFX : How to connect two Nodes by a Line?

java - 无法找到命名参数

java - Web 应用程序的 SQL Server 数据库隔离级别

c# - 只锁定 1 个操作?