假设我有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 :(得分:0)
这看起来并不像我将业务逻辑和执行逻辑混合在一起,尽管我可能误解了你的例子所代表的内容。
如果所有业务逻辑都封装在a.service1()和b.service2()中,那么您发布的代码仅控制此逻辑的执行。
因此,您可以测试每组逻辑(具有外部服务依赖性)并在不改变其含义或行为的情况下从其他上下文调用它们,在此示例中,您只需并行调用它们,这是调用代码的决定
更具体的例子(如实际服务名称和实际方法名称)可能会使您的问题更加清晰。