我正在Weblogic容器中启动时加载一个servlet,我从中生成一个我想连续运行的线程,直到应用程序启动。但是,从容器停止或删除应用程序不会停止生成的线程。我是否可以对如何在停止应用程序时停止此线程提出任何建议。我的应用程序是在Java-8上。
如果你有一个Thread
,你应该使用this flag中解释的易失性标志。
您可以通过切换到ExecutorService
以产生工作线程并在应用程序关闭时调用ExecutorService.shutdown()
来更进一步。如果您不需要正常关闭,则可以在创建线程时使用ExecutorService.shutdownNow()
并设置Thread.setDaemon(true)
标志。
请注意,WebLogic服务器根据Using Work Managers to Optimize Scheduled Work提供管理器以使用服务器线程池。如果您的应用程序与WebLogic服务器紧密耦合,则可能需要使用服务器线程池。
使用ServletContextListener而不是普通的HttpServlet。使用contextInitialized()和contextDestroyed()方法分别在应用程序启动和关闭时启动和停止线程。
正如所建议的那样,我使用了ExecutorService来生成线程。