2014-09-24 97 views
0

假设我有2个服务调用需要并行运行。眼下代码只是像如何从实际业务逻辑中解耦多线程逻辑

a.service1() 
b.service2() 

我用来调用接口并行

List callables = newArrayList(); 

callables.add(new Callable() { 
    public Object call() throws Exception { 
    a.service1(); 
    } 
}); 

callables.add(new Callable() { 
    public Object call() throws Exception { 
    b.service2(); 
    } 
}); 


ExecutorService executor = Executors.newFixedThreadPool(callables.size()); 

List futures = executor.invokeAll(callables); 

for(Future future : futures) { 
... 
} 


executor.shutdown(); 

运行此过程,但这个曾在一个地方多线程&业务逻辑只&我想那个隔离。

+0

这取决于你的问题真的有多复杂,多少复杂性是值得的。 Spring Integration可以很好地处理这种情况,但可能会矫枉过正。 – chrylis 2014-09-24 10:39:16

+0

这2个过程不依赖。他们进行单独的Web服务调用,所以我想让它们平行。这是唯一的要求。 – user1298426 2014-09-24 10:42:30

+0

Spring AOP'@ Async'? – chrylis 2014-09-24 10:56:16

回答

0

这看起来不像是你混合了业务逻辑和执行逻辑给我的,虽然也许我误解了你的例子代表了什么。

如果您的所有业务逻辑都封装在a.service1()和b.service2()中,则您发布的代码仅会控制此逻辑的执行。

因此,您可以测试每一组逻辑(具有外部服务依赖性),并且还可以从其他上下文中调用它们而不会改变它们的含义或行为,在本例中,您只需并行调用它们,这是调用码。

一个更具体的例子(如真实的服务名称和真实的方法名称)可能会使您的问题更清晰。