究竟发生了什么?线程是否停止,或程序是否停止?那我怎么能停止主线程呢?
答案 0 :(得分:6)
我假设您的意思是System.exit
(或Runtime.exit
)调用,无论哪个线程调用它,它都会终止整个JVM。
单个线程仅在其“run”方法终止时停止,而在主线程的情况下,这是一个主要方法;但是,当此线程停止时,JVM也会停止,除非有任何非daemon线程在运行。因此,要在不终止JVM的情况下“停止”主线程,您可以在main方法终止之前创建并启动另一个线程。
public class SleepThread extends Thread {
public static void main(String args[]) {
Thread t = new SleepThread();
t.start();
System.err.println("Main thread exiting.");
}
@Override
public void run() {
System.err.println("Thread running.");
try {
Thread.sleep(5 * 1000); // 5 seconds
} catch (InterruptedException ie) {
System.err.println("INTERRUPTED");
}
System.err.println("Thread exiting.");
}
}
答案 1 :(得分:3)
当return
方法run()
时,该帖子会停止。
主线程只是另一个线程(尽管有些特殊),您可以从main()
返回,也可以调用System.exit()
来停止JVM。
编辑:如上面的评论中所述,上面有点混乱。
请注意,通过从主机线程返回来停止主线程不会自动停止其他线程,并且JVM将继续运行它们直到它们停止或您终止JVM进程。