gpt4 book ai didi

java - eclipse 中 Run 和 Debug 的线程 run() 方法执行不同

转载 作者:行者123 更新时间:2023-12-04 20:48:17 25 4
gpt4 key购买 nike

对于以下程序,在 eclipse 上运行和调试时会出现不同的输出。

 public class MyClass implements Runnable {
public static void main (String[] args) throws Exception {
Thread t = new Thread(new MyClass());
t.start();
System.out.print("Started");
t.join();
System.out.print("Complete");
}
public void run() {
for (int i = 0; i < 4; i++) {
System.out.print(i);
}
}
}

当它作为 java 应用程序运行时,OUTPUT

Started0123Complete

当 checkin Debug Mode OUTPUT is

0123StartedComplete

有人可以帮忙吗?是因为两个线程吗? main thread 和以 t.start() 开始的线程。如果是,那么为什么主线程执行优先完成?

谢谢

最佳答案

打印字符串“Started”和整数的顺序未定义。调用 start 后,无法保证 run 方法中的代码将在调用 join< 之前出现的任何其他语句之前或之后执行。这是多线程应用程序的本质。

您在 Debug模式和运行模式下看到特定输出的事实可能纯属偶然,如果您多次运行代码或在不同的 JVM 平台/版本上运行代码,可能会发生变化。如果在这种情况下需要确定性顺序,实现它的唯一方法是在 before 调用 start 之前打印一个字符串,或者引入一些其他类型的信号量来强制线程等待主线程或反之亦然。

关于java - eclipse 中 Run 和 Debug 的线程 run() 方法执行不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27948067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com