如何使用Callable与void返回types?

我正在一个项目中,我有多个接口和两个实现类需要实现这两个接口。

假设我的第一个接口是 –

public Interface interfaceA { public void abc() throws Exception; } 

其实施是 –

 public class TestA implements interfaceA { // abc method } 

我这样称呼它 –

 TestA testA = new TestA(); testA.abc(); 

现在我的第二个界面是 –

 public Interface interfaceB { public void xyz() throws Exception; } 

其实施是 –

 public class TestB implements interfaceB { // xyz method } 

我这样称呼它 –

 TestB testB = new TestB(); testB.xyz(); 

问题陈述:-

现在我的问题是 – 有什么办法,我可以并行执行这两个实现类? 我不想连续运行它。

意思是,我想同时运行TestATestB实现? 这可能吗?

我想在这里使用Callable,但不知道如何使用Callable与void返回types在这里 –

我们以TestB类为例:

 public interface interfaceB { public void xyz() throws Exception; } public class TestB implements interfaceB, Callable<?>{ @Override public void xyz() throws Exception { //do something } @Override public void call() throws Exception { xyz(); } } 

上面的代码给出了编译错误

更新: –

看起来很多人都build议使用Runnable而不是Callable。 但不知道如何在这里使用Runnable,以便可以并行执行TestA and TestB

您可以使用java.lang.Thread来并行执行。 但是,在大多数情况下,使用java.util.concurrent.ExecutorService会更容易。 后者提供了一种提交Callable的方法,并返回Future来获得结果(或等待完成)。

如果testA.abc()testB.xyz()应该并行执行,那么可以使用ExecutorService在单独的线程中执行前者,而后者则在原始线程中执行。 然后等待前者完成同步。

 ExecutorService executor = ... // eg Executors.newFixedThreadPool(4); Future<Void> future = executor.submit(new Callable<Void>() { public Void call() throws Exception { testA.abc(); return null; } }); testB.xyz(); future.get(); // wait for completion of testA.abc() 

为什么你需要一个无效的并行运行的东西? 首先,如果你不需要返回值,你可以直接返回null

为了使事情平行,你需要使用线程/调度。 我个人build议避免使用Callables,并使用Runnables(而嘿,没有返回值)。