Java ExecutorService可能在调用线程上执行?

Java ExecutorService可能在调用线程上执行?,java,android,Java,Android,如果您阅读了的文档,它会说: 该命令可以在新线程、池线程或 调用线程,由执行器实现自行决定 我的理解是,调用线程是指调用execute命令的线程 这在我的经验中从未发生过,所以我的问题是:这真的发生过吗 由于调用线程控制UI,我不能允许在调用线程上进行额外的工作。当我使用Executors.newFixedThreadPool(threads)方法构造ExecutorService时,我特别担心这是否会发生 ExecutorService是一个定义广泛合同的接口。例如,如果您查看实现,您将具有更

如果您阅读了的文档,它会说:

该命令可以在新线程、池线程或 调用线程,由执行器实现自行决定

我的理解是,调用线程是指调用
execute
命令的线程

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


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

ExecutorService是一个定义广泛合同的接口。例如,如果您查看实现,您将具有更精确的特征:

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

注意,上面链接的javadoc详细说明了这样一个事实,即各种
执行器
工厂方法返回的
ExecutorService
s是
ThreadPoolExecutor
s


因此,为了更直接地回答您的问题:
执行者。newFixedThreadPool(threads)
不会在调用线程上执行任务。

除了其他答案之外,javadoc中的这段引文还提供了一个在调用线程中运行代码的
执行者实施示例

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

更典型的是,任务是在调用方线程以外的一些线程中执行的。下面的执行器为每个任务生成一个新线程


文件上说,这取决于执行人的执行情况。您可以实现自己的执行器,只需调用
Runnable.run()
class DirectExecutor implements Executor {    
    public void execute(Runnable r) {
        r.run();    
    }  
}
class ThreadPerTaskExecutor implements Executor {    
    public void execute(Runnable r) {
        new Thread(r).start();    
    }  
}