0

我有一个应用程序可以生成工作线程并在工作线程中处理文件。在应用程序关闭请求中,我希望应用程序仅在工作线程完成处理当前文件(如果它正在处理文件)时关闭。我正在使用 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 .timeout=60 wrapper.signal.mode.hup=FORWARD wrapper.startup.timeout=300 wrapper.usesystemtime=FALSE wrapper.ping.timeout=120

任何人都可以帮助我解决我正在做的错误。

4

1 回答 1

0

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

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

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

于 2009-10-22T01:09:09.323 回答