directExecutor的优点

问题描述 投票:0回答:3

据我了解,Guava 的 MoreExecutors.directExecutor() 创建了一个 Executor,它将在执行方法调用返回之前执行可运行对象。

哪些用例需要直接执行器?调用者不能直接调用 runnable.run() 来直接调用 runnable.run() 而不是通过创建执行器并将 runnable 提交给该执行器来进行额外的间接级别吗?也许我错过了它存在的真正目的。我想了解这在什么情况下有用。

java guava
3个回答
5
投票

很少有地方同时需要

Runnable
Executor

其中之一是例如

ListenableFuture
及其
addListener
方法。如何在同一线程中立即执行侦听器的唯一方法是提供直接执行器。


3
投票
当您调用需要指定执行器来执行任务的 API 时,

MoreExecutors.directExecutor()
非常有用(例如
Futures.transform()
listenableFuture.addListener()
等)。

请注意,当您将

directExecutor()
与这些 API 一起使用时,可运行程序可能会在这两个线程之一上运行:

  • 完成之前的future的线程
  • 调用
    transform()
    /
    addListener()
  • 的线程

这种不确定性可能会导致意想不到的问题。所以使用时要小心

directExecutor()


0
投票

使用 Java 8+,我们可以将

Runnable::run
代替
MoreExecutors.directExecutor()
传递给 ListenableFuture.addListener
Futures.transform
方法,并且行为将是相同的。

© www.soinside.com 2019 - 2024. All rights reserved.