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

时间:2018-03-21 16:54:56

标签: java multithreading

看看这段代码:

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)这样的东西?

2 个答案:

答案 0 :(得分:4)

您正在创建的线程是独立的,并且不依赖于主线程终止。您可以使用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");
}

答案 1 :(得分:3)

将其设为a daemon thread

  

public final void setDaemon(boolean on)

将此主题标记为a   守护程序线程或用户线程。 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");