栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

无法停止使用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()
命令来等待监视器通知,那么您将需要更改它,以便它使用带有超时的等待命令,这样您就不会永远阻塞。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/466833.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号