gpt4 book ai didi

java - java中的bug线程处理

转载 作者:行者123 更新时间:2023-12-01 19:25:07 25 4
gpt4 key购买 nike

public class Test extends Thread{
public void hello(String s){
System.out.println(s);
}
public void run(){
hello("I’mrunning...");
}//endofrun()
public static void main(String [] args){
Test t=new Test();
System.out.println("always first");
t.start();

System.out.println("always second but why?");
}
}

我已经运行了那段代码 30 次。

为什么“总是第二,但为什么?”总是在控制台上排名第二?当 t.start() 被调用时,我们有 2 个线程。 (2个栈):主线程和次线程。所以“我正在运行”有时必须是控制台上的第二个输出。当我删除“始终第一个”输出语句而不是剩下的两个输出时,表现出不确定性(这就是它应该的方式)

那么我的想法有什么问题,为什么是 System.out.println("always first");影响并发?

最佳答案

通过首先向控制台写入内容,您很可能会影响 JIT 编译的发生,甚至可能影响类型初始化的发生。我并不认为这样的事情改变了观察到的顺序是完全令人难以置信的。如果程序在不同系统和不同 JVM 上的行为略有不同,我不会感到惊讶。

问题是,这些顺序中的任何一个都是完全有效的。您不应该依赖其中之一,并且如果它总是以相同的方式发生,那么它不是一个错误。 (或者更确切地说,可能是 - 但不一定是。)

如果你想确保特定的顺序,你需要明确地做到这一点 - 如果你不介意事情发生的顺序,那么就没有问题:)

关于java - java中的bug线程处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1654606/

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