gpt4 book ai didi

java - 如何使用具有 void 返回类型的 Callable?

转载 作者:IT老高 更新时间:2023-10-28 20:25:23 44 4
gpt4 key购买 nike

我正在从事一个项目,其中我有多个接口(interface)和两个需要实现这两个接口(interface)的实现类。

假设我的第一个接口(interface)是 -

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 但不确定如何在这里使用带有 void 返回类型的 Callable -

我们以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();
}
}

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

更新:-

看起来很多人建议使用 Runnable 而不是 callable。但不知道如何在这里使用 Runnable 以便我可以并行执行 TestA 和 TestB

最佳答案

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

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

ExecutorService executor = ... // e.g. 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()

关于java - 如何使用具有 void 返回类型的 Callable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22795563/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com