首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提高servlet调用2个web服务的速度?

如何提高servlet调用2个web服务的速度?
EN

Stack Overflow用户
提问于 2011-06-15 04:31:35
回答 4查看 580关注 0票数 1

我有一个调用2个web服务的servlet。这两个web服务是在单独的线程中调用的。在我的servlet thered (扩展HttpServlet的类)中,我启动了这两个线程,然后在while循环中等待,直到这些线程结束。这在JBOSS和Tomcat服务器上消耗了相当多的CPU (几乎100%),直到while循环结束。我使用wsiimport工具为WS客户端创建了代码。为每个HTTP请求创建WSClient对象(调用新的WSClient (wsdlLocation,serviceName))需要相当长的时间。

你能给我一些关于如何进一步提高速度的建议吗?如何更快地创建WS客户端对象?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-15 04:40:38

busy wait了。

或者在再次检查其他线程是否已完成之前使用sleep the current thread进行短暂的延迟,或者利用wait() / notify()在其他操作完成时向当前线程发出警报(尽管这在servlet中可能会非常混乱)。

至于将新的web服务客户端导入到您的应用程序中的过程,如果您需要处理不同的WSDL来生成客户端代理代码,我不确定还有更好的方法。唯一的选择可能是找到一种根本不需要不断生成新代码的设计。

票数 2
EN

Stack Overflow用户

发布于 2011-06-15 23:37:46

您可以创建一个线程池,并将调用分配给该池中的线程。查看ThreadPoolExecutor

至于更快地创建代理,我建议在缓存中缓存代理对象,或者将其绑定到JNDI树。正确处理缓存引用失效的情况下的异常,以便您可以重新初始化它们。

票数 1
EN

Stack Overflow用户

发布于 2011-06-15 04:36:43

您可能希望考虑使用Tomcat Comet extensions,这样就不必陷入while循环。

如果您必须使用标准的servlet结构,那么可以设置一个大的休眠(类似于try{ Thread.sleep(1000); }catch(InterruptedException ie){}),这样您就可以在while循环中花费大部分时间休眠。它只比一个简单的while循环稍微好一点,所以你真的想看看上面链接的非阻塞选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6349738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档