无法停止使用while(true)循环运行Web应用程序的tomcat服务器

无法停止使用while(true)循环运行Web应用程序的tomcat服务器,第1张

无法停止使用while(true)循环运行Web应用程序的tomcat服务器

我有一些建议,但是它们要求您稍微修改一下体系结构,以便更好地使用容器环境。

Servlet容器支持可获取各种事件通知的“侦听器”。具体来说,其中之一是

ServletContextListener
当上下文(通过Web
contextInitialized
方法)投入使用(通过方法)和何时将其退出服务(通过
contextDestroyed
方法)时得到通知的通知。

我的建议是执行以下 *** 作:

  1. 更改
    Consumer
    类的构造函数,使其不会自动调用
    consume()
    ; 而是添加一个类似的公共方法,
    consumeOnce
    并且根本不要在该级别使用循环
  2. 编写一个
    ServletContextListener
    Consumer
    Thread
    作为成员的引用以及一个
    volatile boolean stop
    标志;在
    contextInitialized
    其中应该创建一个新
    Consumer
    对象,然后启动一个新的(守护程序)线程,该线程:
    • 来电
      Consumer.consumeOnce
    • 要求
      Thread.sleep
      适当的时间
    • 循环执行前2个步骤,直到stop标志为true
  3. 让您
    ServletContextListener
    contextDestroyed
    方法将stop标志设置为
    true
    Thread.interrupt
    在正在运行的线程上调用。

我确定我缺少一些确切的细节,但这是一般的想法。当Tomcat关闭时,您的代码将收到关闭通知,您可以干净地终止自己的循环线程。您可能需要提供一种方法,使之

Consumer
在尝试获取
Thread.interrupt
信号时不中止,从而中止尝试消耗其所消耗的任何东西(例如,停止等待从空队列中拉出对象)。(例如,如果您使用一个
Object.wait()
命令来等待监视器通知,那么您将需要更改它,以便它使用带有超时的等待命令,这样您就不会永远阻塞。)



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5442327.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-11
下一篇2022-12-11

发表评论

登录后才能评论

评论列表(0条)

    保存