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