据我所知,Guava的MoreExecutors.directExecutor()创建了一个Executor,它将在execute方法调用返回之前执行runnable。
需要直接执行者的用例是什么?调用者是否可以通过创建执行程序并将runnable提交给此执行程序来直接调用runnable.run()而不是直接调用间接级别?可能是我错过了它存在的真正目的。我想了解在什么情况下这很有用。
答案 0 :(得分:2)
很少有地方同时需要Runnable
和Executor
。
其中一个例如是ListenableFuture
及其addListener
方法。如何在同一个线程中立即执行监听器的唯一方法是提供直接执行程序。
答案 1 :(得分:0)
MoreExecutors.directExecutor()
在调用需要指定执行器来执行任务的 API 时很有用(例如 Futures.transform()
、listenableFuture.addListener()
等)。
请注意,当您将 directExecutor()
与这些 API 一起使用时,可运行对象可能会在以下两个线程之一上运行:
transform()
/addListener()
的线程这种不确定性可能会导致意外问题。所以使用 directExecutor()
时要小心。