使守护程序线程运行直到 JVM 退出



阅读抛出守护进程线程并根据我的要求实现后,提出了一些疑问。请澄清我

  1. 我正在使用 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();    
    }
    
  2. 在服务管理器类中,我正在运行一个无限循环来运行程序,直到 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 停止(服务器停止),否则告诉它不要退出。

注意:我正在尽我所能来格式化这篇文章。 但是今天有些事情正在发生,它没有得到格式化:(

守护

程序线程将一直运行,直到 run() 方法终止,方法是正常退出或引发异常(或直到 VM 退出,这是您想要的)。由于您捕获了 startService() 抛出的所有异常,它将运行直到 startService()返回或抛出异常,然后正常退出。

请注意,如果startService()在等待 I/O、休眠或处于等待状态时中断,则通常会引发InterruptedException。行为良好的线程通常在中断时退出,因为这是告诉线程退出的正常方法。

请注意,将线程标记为守护程序仅意味着 VM 不会等到线程退出后再关闭。有关线程终止的其他行为均不受线程是否为守护程序的影响。

最新更新