如何使用带有无效返回类型的Callable?

2021/01/17 13:31 · java ·  · 0评论

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

假设我的第一个接口是-

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 and 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()

为什么在并行运行某些东西时需要空隙?首先,如果您不需要返回值,则只需返回即可null

为了使某些东西并行化,您需要使用线程/调度。我个人建议避免使用Callables,而应使用Runnables(嘿,没有返回值)。

较短的版本:

ExecutorService executor = ... // e.g. Executors.newFixedThreadPool(4);
Future<?> future = executor.submit(() -> testA.abc());
testB.xyz();
future.get(); // wait for completion of testA.abc()

需要注意的是,必须并行运行某些东西而没有返回任何东西,这可能表示一种错误的模式:)

另外,如果您在Spring环境中,则可以使用:https : //spring.io/guides/gs/async-method/

本文地址:http://java.askforanswer.com/ruheshiyongdaiyouwuxiaofanhuileixingdecallable.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!