如何将多线程逻辑与实际业务逻辑分离

时间:2014-09-24 10:29:44

标签: java multithreading

假设我有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();

但这有多线程&只在一个地方的商业逻辑和我想把它分开。

1 个答案:

答案 0 :(得分:0)

这看起来并不像我将业务逻辑和执行逻辑混合在一起,尽管我可能误解了你的例子所代表的内容。

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

因此,您可以测试每组逻辑(具有外部服务依赖性)并在不改变其含义或行为的情况下从其他上下文调用它们,在此示例中,您只需并行调用它们,这是调用代码的决定

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