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();
}
}