我有一个要求,我想要启动一个轮询器,它将一直运行,直到机器重新启动或进程被杀死。现在,我尝试使用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会关闭。
有了这个问题,我该怎么做。
由于
答案 0 :(得分:5)
您只需创建一个主题并在致电th.setDaemon(true)
之前致电th.start()
。
编辑:
上面回答了“如何创建一个守护程序线程”的问题,但是(由于问题的范围已经改变),一个正确的答案是:不创建守护程序线程如果你希望你的线程在主线程完成后让JVM不再退出。
答案 1 :(得分:4)
答案 2 :(得分:2)
Java中的术语“守护程序线程”有点误导,因为它实际上意味着“该线程不应该保持JVM活着”。这意味着一旦最后一个非守护程序线程终止,JVM就会关闭(正如您在问题中已经说明的那样)。
你可能正在寻找的是Apache Commons Daemon项目,它允许创建漂亮的“系统服务”,通过/etc/init.d/
条目和所有条目启动。这适用于Windows和* nix系统。