【问题标题】:Why is the order of the output different everytime I run this program?为什么每次运行这个程序时输出的顺序都不同?
【发布时间】:2014-12-06 17:01:30
【问题描述】:

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

我的输出

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

【问题讨论】:

  • 它与操作系统有关。一旦线程启动,Os 就会调度线程。有些获得高优先级,有些获得低优先级。
  • 在编写任何此类代码之前,您应该阅读并发/多线程的基础知识。如果你这样做了,那么你就不会有这个问题了。

标签: java multithreading operating-system


【解决方案1】:

你是绝对正确的,那是因为多线程。

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

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

【讨论】:

  • System.out 呢?
猜你喜欢
  • 2014-12-11
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 2016-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
相关资源
最近更新 更多