Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jboss WS和线程_Java_Multithreading_Jboss - Fatal编程技术网

Java Jboss WS和线程

Java Jboss WS和线程,java,multithreading,jboss,Java,Multithreading,Jboss,我制作了一个测试WebService,它启动线程,每10秒写入一次文件时间戳。我故意不让线程停止mehanism。 现在,如果我停止测试WebService,甚至删除它,该线程将永远存在Jboss中 (需要重新启动JBoss)。 JBoss不知道在WebService上下文中生成的线程,这正常吗 在JVM中,当应用程序关闭时,所有线程都被杀死,但这里是Jboss拥有的JVM, 它动态加载类 这是“功能”还是bug 我问这个问题,因为我们有第三方应用程序在执行线程,我注意到它们在WebServic

我制作了一个测试WebService,它启动线程,每10秒写入一次文件时间戳。我故意不让线程停止mehanism。 现在,如果我停止测试WebService,甚至删除它,该线程将永远存在Jboss中 (需要重新启动JBoss)。 JBoss不知道在WebService上下文中生成的线程,这正常吗

在JVM中,当应用程序关闭时,所有线程都被杀死,但这里是Jboss拥有的JVM, 它动态加载类

这是“功能”还是bug


我问这个问题,因为我们有第三方应用程序在执行线程,我注意到它们在WebService析构函数上没有关闭,所以在重新发布后,我们有一个问题。

清理Web服务使用的资源,是WebService本身的责任

Tomcat将帮助您在Web服务未正确执行此操作时记录警告(例如,当MySQL JDBC驱动程序离开时),它甚至会尝试为您清除ThreadLocals(另请参见实用程序类中的注释)

在您的情况下,由于您正在Web服务中使用第三方应用程序,因此在拔出Web服务时,您有责任清理第三方应用程序使用的资源。如果JBoss至少能像Tomcat那样报告“资源泄漏”,那就太好了,但这将是一个特性,而不是一个bug

我制作了一个测试WebService,它启动线程,每10秒写入一次文件时间戳。我故意不让线程停止mehanism。现在,如果我停止测试WebService,甚至删除它,线程将永远存在Jboss中(需要重新启动Jboss)。JBoss不知道在WebService上下文中生成的线程,这正常吗

你不应该启动自己的线程,所以JBoss不会帮你清理东西

另请参见(主要适用于企业Java bean)或“”

如果第三方应用程序自己执行线程,而您无法更改它,那么它可能不适合应用程序服务器。将旧应用程序移植到JavaEE中的一个老技巧是使用具有init和destroy方法的方法来管理其生命周期


如果您可以更改,请查看我上面链接的问题/答案,使用
ExecutorService
是管理线程的现代方法,以便服务器知道您的工作。

是的,正如我所假设的。不过,在JBoss中注册线程可能会有点麻烦。@Marvin你和我强烈建议:如果你停止/启动自己的线程,就会发生一些奇怪的事情。我已经使用JBoss的线程池成功地管理了JBoss5.1中的线程(用于定制服务)。如果不使用JBoss的线程池,它将无法正常工作。Mine WS使用自己的老式线程管理,正如在jvm中一样(毕竟,JBoss只是“另一个”java应用程序:),但由于它不是新软件,而且逻辑是线程始终与webservice上下文共存,他们也应该考虑一下。我同意,他们这样写,这是你自己的处理方式,但要告诉用户避免线程,这意味着他们的Web服务要像“hello world”一样:P@Marvin:我不明白你关于“告诉用户避免线程”的观点。你的意思是“我团队中的其他程序员在制作Web服务”?我在一些JBoss页面上读到过,在Web服务中制作自己的线程令人沮丧。它不应该超出您对它们的控制范围(启动/停止)