use*_*664 4 java stripes web-services web-applications java.util.concurrent
我们有一个stipes(java)web-app,需要从一个方法进行大约15个不同的webserivce调用.例如: ...
public Resolution userProfile()
{
serviceOneCall();
serviceTwoCall();
serviceThreeCall();
serviceFourCall();
....
serviceTenCall();
return new RedirectResolution("profiel.jsp");
}
Run Code Online (Sandbox Code Playgroud)
所有这些都可以并行调用,而不是相互依赖.大多数这些调用所做的一件事就是将数据放入会话中,并且一两个可能将数据放入会话中的同一对象中,因此线程安全可能是一个问题.
有人能建议同时调用所有这些的好方法吗?
并行执行此操作的所有解决方案都将涉及生成新线程或将作业提交到线程池以进行远程网络调用.
避免线程安全问题的一个好方法是使用executorService
和提交Callable<T>
(submit(Callable)
或者invokeAll(Collection<Callable>)
方法)的子类并让Callables返回响应值.这样,您的初始方法可以简单地处理每个调用的返回值,并选择在会话中设置响应或更新其他对象,而不是在另一个线程中发生此工作.
所以基本算法:
Callable<T>
子类中的executorServiceFuture<T>
你从executorService获得的sFuture.get()
每个阻止,直到你有一个响应,然后处理响应,但你希望回到主线程 归档时间: |
|
查看次数: |
2261 次 |
最近记录: |