如何使用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();
问题陈述:-
现在我的问题是 – 有什么办法,我可以并行执行这两个实现类? 我不想连续运行它。
意思是,我想同时运行TestA
和TestB
实现? 这可能吗?
我想在这里使用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(而嘿,没有返回值)。