2014-09-24 100 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()中,則您發佈的代碼僅會控制此邏輯的執行。

因此,您可以測試每一組邏輯(具有外部服務依賴性),並且還可以從其他上下文中調用它們而不會改變它們的含義或行爲,在本例中,您只需並行調用它們,這是調用碼。

一個更具體的例子(如真實的服務名稱和真實的方法名稱)可能會使您的問題更清晰。