在阅读了 throw Daemon threads 并根据我的要求实现之后提出了几个疑问。请澄清我
我正在使用 ServletContextListener 类来调用需要运行 unitl JVM 退出的守护程序线程
public void contextInitialized (ServletContextEvent event) { context = event.getServletContext(); //getting from spring context MyServiceManager serviceManager = (MyServiceManager) ctx.getBean("myServiceManager"); serviceManager.setDaemon(true); serviceManager.start(); }
在 ServiceManager 类中,我正在运行一个无限循环以永远运行程序,直到 JVM 存在
public void run() { try { startService(); } catch (Exception e) { logger.error("Error Occured in Background Process Runner"); } } private void startService(){ while(true){ try{ //invoke some new threads and do processing jobs until server/jvm stops }catch(Exception e) { //log but don't quit } } } }
问题是,具有上述实现的守护线程会永远运行吗?如果没有,我应该怎么做才能完成我的工作。除非 JVM 停止(服务器停止),否则告诉它不要退出。
注意:我正在尽我的能力来格式化这篇文章。但是今天发生了一些事情,它没有被格式化:(