Java - 当程序结束时自动停止线程

6

看一下这段代码:

public class ThreadTest {

    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true) {
                    //some code here
                }
            }
        }).start();

        System.out.println("End of main");
    }

}

通常情况下,在达到main的结尾时,程序会终止。但在本例中,程序将打印“End of main”,然后继续运行,因为线程仍在运行。是否有一种方式可以使线程在达到结尾时自动停止,而不使用像while(isRunning)这样的东西?


1
你真的验证过你所声称的吗? - shriyog
1
@narush 是的,我验证过了。这就是正在发生的事情。 - Conner Dassen
2个回答

9
您正在创建的线程是独立的,不依赖于主线程的终止。您可以使用Daemon线程来实现相同的功能。当没有其他非守护线程运行时(包括执行的主线程),JVM将终止守护线程。
public static void main(String[] args) {
    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            while (true) {
                System.out.println("Daemon thread");
            }
        }
    });
    t.setDaemon(true);
    t.start();

    System.out.println("End of main");
}

3

将其设置为守护线程

public final void setDaemon(boolean on)

将此线程标记为守护线程或用户线程。当所有正在运行的线程都是守护线程时,Java虚拟机将退出。必须在启动线程之前调用此方法。

Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
        while(true) {
            //some code here
        }
    }
});

t.setDaemon(true);
t.start();

System.out.println("End of main");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接