【问题标题】:JavaServiceWrapper:Application not waiting to shutdownJavaServiceWrapper:应用程序不等待关闭
【发布时间】:2009-10-22 09:09:09
【问题描述】:

我有一个生成工作线程并在工作线程中处理文件的应用程序。在应用程序关闭请求中,我希望应用程序仅在工作线程完成处理当前文件(如果它正在处理文件)时关闭。我正在使用 JavaServiceWarapper 来管理我的应用程序。

我添加了关闭挂钩,通知工作线程在收到关闭请求时不要开始处理新文件。

处理一个文件永远不会超过 30 秒,我将超时设置为 60 秒,只是为了安全起见。

由于某种原因,当我触发停止时,我的应用程序立即关闭并且不等待工作线程完成。工作线程收到关闭请求但应用程序立即退出(并且不等待 60 秒)

一些重要的设置我有 wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp wrapper.adviser=FALSE wrapper.debug=FALSE wrapper.disablerestarts=FALSE wrapper.jvmexit.timeout=60 wrapper.requestthreaddumponfailedjvmexit=TRUE wrapper.shutdown.timeout=60 wrapper.signal.mode.hup=FORWARD wrapper.startup.timeout=300 wrapper.usesystemtime=FALSE wrapper.ping.timeout=120

谁能帮我解决我正在做的错误。

【问题讨论】:

    标签: wrapper shutdown


    【解决方案1】:

    您没有碰巧将所有工作线程都作为守护进程启动,是吗?如果是这样,VM 会认为他们正在做的工作无关紧要并死掉,尽管他们仍在工作..

    来自 Thread.setDaemon() 的 JavaDocs:“当唯一运行的线程都是守护线程时,Java 虚拟机退出。”

    在启动线程之前尝试 setDaemon(false) 看看是否有帮助。

    【讨论】:

    • 嗨 Saleem,我将所有工作线程作为非守护进程。那没有帮助:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 2013-05-30
    相关资源
    最近更新 更多