gpt4 book ai didi

java - 有人可以帮助解释这两个线程的输出吗?

转载 作者:行者123 更新时间:2023-12-02 02:11:12 28 4
gpt4 key购买 nike

public class Join1 {
public static void main(String[] args) {
Thread t = new Thread() {
public void run() {
System.out.print("EnterValue:");
try {
System.in.read();
} catch (Exception ex) {}
System.out.println("Thread Finished.");
}
};
System.out.println("Starting Thread");
t.start();
System.out.println("Joining");
try {
t.join();
} catch (Exception ex) {}
System.out.println("Main Finished.");
}
}

输出

启动线程

加入

输入值:

线程完成

主要完成

public class Join2 {
public static void main(String[] args) {
Thread t = new Thread() {
public void run() {
System.out.println("EnterValue:");
try {
System.in.read();
} // thread blocked
catch (Exception ex) {}
System.out.println("Thread Finished.");
}
};

System.out.println("Starting Thread");
t.start();
try {
Thread.sleep(2000);
} catch (Exception e) {}
System.out.println("No Join");
System.out.println("Main Finished.");
}
}

输出

启动线程

输入值:

没有加入

主要完成

3(输入)

线程完成

我不明白其中一些输出的顺序。例如,在 Join2 中,为什么它会在您输入值之前输出 main 中的完成行?

最佳答案

给出的两个示例中的唯一区别是在使用 t.start() 启动线程后调用的方法

Join1.java 调用 Thread.join(),根据文档,它表示“等待该线程终止”。因此,只有当线程的 run 方法完成时(在 System.in.read() 完成之后),“Main Finished”才会执行。打印”

Join2.java 调用 Thread.sleep(2000) 将线程暂停 2000 毫秒。尝试注释掉该行并查看结果。此外,请注意,程序在打印“Main Finished”后并未退出。线程仍在等待输入。

TLDR;

Thread.join() 使 main 暂停,直到该线程完成。

Thread.sleep(2000) 仅在继续之前暂停 main 2 秒,另一个线程继续运行。

关于java - 有人可以帮助解释这两个线程的输出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50011215/

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