何时使用Guava sameThreadExecutor

时间:2016-07-13 06:31:15

标签: guava

我刚刚遇到这样的代码:

ExecutorService executorService = MoreExecutors.sameThreadExecutor();

for (int i = 0; i < 10; i++) {
  executorService.submit(new Callable<Void>() {
    @Override
    public Void call() throws Exception {
      try {
        Do some work here...
        return null;
      } catch (final Exception e) {
        throw e;
      } finally {
        //
      }
    }
  });
}

这与下面的代码片段有什么区别?如果我理解正确,sameThreadExecutor使用调用submit()的相同线程,这意味着所有这些10&#34;作业&#34;在主线程上逐个运行。

for (int i = 0; i < 10; i++) {
      try {
        Do some work here...
      } catch (final Exception e) {
        throw e;
      } finally {
        //
      }
}

谢谢!

1 个答案:

答案 0 :(得分:6)

首先,不推荐使用MoreExecutors#sameThreadExecutor

  

已弃用。如果您只需要directExecutor(),请使用Executor,如果您需要newDirectExecutorService()ListeningExecutorService此方法将于2016年8月删除。

所以问题是:您何时需要MoreExecutors#directExecutorMoreExecutors#newDirectExecutorService(上面提到的两者之间的差异 - ListeningExecutorServiceListenableFuture的番石榴扩展名)。答案是: