java—ExecutorService与completablefuture之间的关系

tjvv9vkg  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(367)

关闭。这个问题需要更加关注。它目前不接受答案。
**想改进这个问题吗?**编辑这篇文章,更新这个问题,使它只关注一个问题。

五天前关门。
改进这个问题
我正在学习多线程,现在对一个主题感到困惑,即executorservice和completablefuture。
让我总结一下到现在为止我学到的东西。
executorservice是一个java高级线程api,它有助于管理线程,即两个独立的线程正在执行它们的任务。但是,如果线程是依赖的,那么我们可以使用生产者-消费者模式以及更多。这有助于实现并发性。因为多个线程可以用于运行多个任务。
但在completablefuture中,我们称之为异步编程/React式编程,也用于完成相同的任务。i、 e它还可以运行多个线程。
但我不知道什么时候用哪一种,它们之间有什么不同?有哪些用例可以让它们完美地就位?

bybem2ql

bybem2ql1#

从本质上讲,一个完整的未来是一种机制,通过这种机制,一个线程可以发现另一个线程何时完成了某项工作。
因此,一个典型的模型是这种方法:

CompletableFuture<Result> doSomething() {
      CompletableFuture<Result> future = new CompletableFuture<>();
        ... arrange to do work in some other thread ...
      return future;
 }

dosomething()的调用方返回一个对象,它可以使用该对象来确定完成、等待完成、获取执行“某事”的结果,或者使用该结果运行其他一些工作。
那么,dosomething()如何安排在其他线程中执行工作呢。好的,一种方法是通过执行器服务执行工作。尽管还有很多其他的方法。无论如何,当工作完成时,它将调用 future.complete(someResult) 将completablefuture设置为具有预期结果的“已完成”状态。
也许你很困惑,因为打电话的人会写信

doSomething().thenAcceptAsync((result) -> blahBlah(result));

在本例中,dosomething()按上述步骤进行。完成后,我们希望运行另一个操作,也是异步的。因为我们使用了AcceptAsync,所以这项工作将通过completablefuture框架(确切地说是公共forkjoinpool,这是有文档记录的)已知的executorservice来处理。
摘要-这不是“选择一个或另一个”。executorservices提供在其他线程中运行工作单元的方法。completablefutures提供了了解这些工作单元的完成情况并对其作出React的手段。

相关问题