【发布时间】:2012-12-03 23:50:07
【问题描述】:
我正在自学 Java 线程,我注意到一些让我有点困惑的东西。我创建了一个名为engine 的类来实现Runnable。 run 方法只是打印“Hello World”,休眠一秒钟,然后重复。
在我的主要方法中,我有:
public static void main(String[] args) {
Thread thread = new Thread(engine);
thread.start();
System.out.println("Done.");
}
正如我所料,我看到了“Hello World”和“Done”。打印的很快,说明main方法已经结束了,但没想到我开始的线程在main结束后还在运行。
为什么程序在 main 退出后仍继续执行?我原以为当 main 退出时,进程会终止,所有线程都会被强制清理。这是否意味着必须明确地加入/终止每个线程才能使 Java 程序终止?
【问题讨论】:
-
我的猜测是,当所有线程都完成时,程序就完成了。如果您的线程处于循环中,则程序在终止之前不会完成。
-
只是为了确保我不会发疯(我总是在不考虑 C 的情况下编写连接代码),如果我在 C 程序中执行此操作,那么它会强制终止线程,对吗?
-
来自实践中的并发“如果任何应用程序线程(守护程序或非守护程序)在关闭时仍在运行,它们将继续与关闭进程并发运行。...... JVM 不会尝试停止或中断任何在关闭时仍在运行的应用程序线程;当 JVM 最终停止时,它们会突然终止”。因此,您的线程有更多的事情要做(就像上面所说的 gsingh2011)
标签: java multithreading