如果守护程序线程正在运行,如何使程序保持活动状态?

时间:2011-06-27 10:56:51

标签: java daemon

我有一个要求,我想要启动一个轮询器,它将一直运行,直到机器重新启动或进程被杀死。现在,我尝试使用shell脚本从主方法启动轮询器,但问题是,只要main方法完成执行,轮询器也会停止工作,因为我没有使用任何服务器来实现。< / p>

我听说过有关daemon threads的内容,但我想知道如何创建一个将永远运行的守护程序线程,并帮助我的轮询器也可以运行。

更新:

public class SomeThread extends Thread {

    @Override
    public void run() {
        UnitPoller unitPoller = new UnitPoller();
        unitPoller.doPolling();
    }

    public static void main(String[] args) {
        SomeThread someThread = new SomeThread();
        someThread.setDaemon(true);
        someThread.start();
    }
}

上面是我更新的类,现在每当我从main方法执行此线程时,它都会创建一个线程,但是一旦main方法的执行完成,我的轮询器就会停止工作,因为JVM会关闭。

有了这个问题,我该怎么做。

由于

3 个答案:

答案 0 :(得分:5)

您只需创建一个主题并在致电th.setDaemon(true)之前致电th.start()

编辑:

上面回答了“如何创建一个守护程序线程”的问题,但是(由于问题的范围已经改变),一个正确的答案是:不创建守护程序线程如果你希望你的线程在主线程完成后让JVM不再退出。

答案 1 :(得分:4)

答案 2 :(得分:2)

Java中的术语“守护程序线程”有点误导,因为它实际上意味着“该线程应该保持JVM活着”。这意味着一旦最后一个非守护程序线程终止,JVM就会关闭(正如您在问题中已经说明的那样)。

你可能正在寻找的是Apache Commons Daemon项目,它允许创建漂亮的“系统服务”,通过/etc/init.d/条目和所有条目启动。这适用于Windows和* nix系统。