Java 等待服务返回的错误做法?

Java 等待服务返回的错误做法?,java,multithreading,spring,tomcat,websphere,Java,Multithreading,Spring,Tomcat,Websphere,我正在调用一个SpringWeb服务,它需要大约5秒钟才能返回响应。 webservice调用在部署到websphere之前在Tomcat容器中进行。 另一位开发人员告诉我,对这个服务的调用应该在一个单独的java线程中处理,因为“让JVM在一行代码上停留太长时间的错误做法”,在这种情况下,它停留在调用web服务的代码行上。我不同意,我认为如果web服务需要5秒或10秒才能完成,那么就可以收到响应,代码执行将正常继续。我说得对吗?我想说两点: 如果后续的计算取决于该web服务的结果,那么无论如何

我正在调用一个SpringWeb服务,它需要大约5秒钟才能返回响应。 webservice调用在部署到websphere之前在Tomcat容器中进行。 另一位开发人员告诉我,对这个服务的调用应该在一个单独的java线程中处理,因为“让JVM在一行代码上停留太长时间的错误做法”,在这种情况下,它停留在调用web服务的代码行上。我不同意,我认为如果web服务需要5秒或10秒才能完成,那么就可以收到响应,代码执行将正常继续。我说得对吗?

我想说两点:

  • 如果后续的计算取决于该web服务的结果,那么无论如何您都没有选择,生成一个新线程只是浪费资源

  • 如果这个调用是完全独立的,那么就有理由将其卸载到单独的线程。即使5秒本身并不多,这也可能不是系统无意义地等待独立任务完成的唯一点(现在或将来的代码库)。让独立任务独立运行通常是一种良好的做法


  • 但是,如果您的调用发生在部署到Tomcat容器中的应用程序中(您的问题并不完全清楚这个细节),那么web应用程序生成自己的子线程通常是一种不好的做法。任务应该提交给容器提供的executor服务,如果有的话。

    同步调用webservices是个坏主意,它可能在集成或测试环境中工作,但响应将随着系统负载的增加而成倍增加。您应该看看某种异步通信


    在我们的项目中,我们使用了大量的同步通信,所有通信都被改写为异步。

    是否有任何服务级别协议或非功能性要求指定响应时间?@complete-co.de否,5-10秒是可接受的响应时间。上述“不良行为”的论据是一个技术性的论据,尽管我无法获得更多细节why@nos什么只发生一次?JVM本身是多线程的,tomcat中的应用程序也是多线程的。通过将执行推到另一个线程,您正在阻止另一个线程。没有区别。如果您不需要异步行为,则没有理由使其异步。@不,它会发生多次,每天大约3000次