ExecutorService可能会在调用线程时执行?

时间:2016-10-27 09:30:48

标签: java android

如果您阅读了Executor.execute的文档,则会说:

  

该命令可以在新线程,池化线程或中执行   调用线程,由Executor实现决定。

我的理解是,通过调用线程,它们意味着调用execute命令的线程。

这在我的经历中从未发生过,所以我的问题是:这真的发生过吗?

由于调用Thread控制UI,我不能允许在调用Thread上进行额外的工作。我特别担心在使用ExecutorService方法构造Executors.newFixedThreadPool(threads)时是否会发生这种情况。

2 个答案:

答案 0 :(得分:3)

ExecutorService是定义广泛合同的界面。如果您查看实现,例如说ThreadPoolExecutor,您将拥有更精确的特征:

  

ExecutorService,它使用可能的几个池化线程之一执行每个提交的任务,通常使用Executors工厂方法配置。

请注意,上面链接的javadoc详细说明了各种ExecutorService工厂方法返回的ExecutorsThreadPoolExecutor的事实。

所以更直接地回答你的问题: Executors.newFixedThreadPool(threads)不会在调用线程上执行任务。

答案 1 :(得分:1)

除了其他答案外,来自Executor javadoc的引用提供了一个Executor实现的示例,该实现在调用线程中运行代码,

  

但是,Executor接口并不严格要求执行是异步的。在最简单的情况下,执行者可以立即在调用者的线程中运行提交的任务:

class DirectExecutor implements Executor {    
    public void execute(Runnable r) {
        r.run();    
    }  
}
  

通常,任务在调用者线程之外的某个线程中执行。下面的执行程序为每个任务生成一个新线程。

class ThreadPerTaskExecutor implements Executor {    
    public void execute(Runnable r) {
        new Thread(r).start();    
    }  
}