作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法理解这段代码。我对 Java 的了解只有几个小时。
这是代码:
// Create a new thread.
class NewThread implements Runnable {
Thread t;
NewThread() {
// Create a new, second thread
t = new Thread(this, "Demo Thread");
System.out.println("Child thread: " + t);
t.start(); // Start the thread
}
// This is the entry point for the second thread.
public void run() {
try {
for(int i = 5; i > 0; i--) {
System.out.println("Child Thread: " + i);
// Let the thread sleep for a while.
Thread.sleep(50);
}
} catch (InterruptedException e) {
System.out.println("Child interrupted.");
}
System.out.println("Exiting child thread.");
}
}
public class ThreadDemo {
public static void main(String args[]) {
new NewThread(); // create a new thread
try {
for(int i = 5; i > 0; i--) {
System.out.println("Main Thread: " + i);
Thread.sleep(100);
}
} catch (InterruptedException e) {
System.out.println("Main thread interrupted.");
}
System.out.println("Main thread exiting.");
}
}
这是它的输出:
Child thread: Thread[Demo Thread,5,main]
Main Thread: 5
Child Thread: 5
Child Thread: 4
Main Thread: 4
Child Thread: 3
Child Thread: 2
Main Thread: 3
Child Thread: 1
Exiting child thread.
Main Thread: 2
Main Thread: 1
Main thread exiting.
这是我的问题。
我想了解代码遵循的模式。据我所知,
main()
函数。因此,应该初始化 NewThread 的实例。Child thread: Thread[Demo Thread,5,main]
public void run()
(我错了吗??)在public void run()
中,我想我应该得到一个输出子线程5
,但我得到了主线程5
。我想知道为什么 ??
有谁能帮帮我吗?提前致谢。
最佳答案
t.start()
创建一个新线程,并从中调用 run()
。此时,有两个线程独立运行:一个是调用 start()
的线程,另一个是新线程。原始线程从构造函数返回,然后开始执行 main()
方法中的循环。
由于两个线程是独立的,因此无法保证哪个线程将首先调用 System.out.println
。在您给出的示例输出中,碰巧原始线程首先打印。但反过来也很容易发生。
顺便说一句,如果您是 Java 新手,我建议您在学习线程之前学习该语言的基础知识。您的问题中没有任何内容表明您感到困惑,但线程是一个相对高级的主题,在您达到这一步之前,值得先熟悉一般的语言行为,IMO。这样您就可以确信您看到的任何奇怪行为确实是由于线程造成的,而不是由于误解了语言的其他部分。
关于java - 基本 Java 线程和可运行模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19363920/
我是一名优秀的程序员,十分优秀!