如果您阅读了Executor.execute的文档,则会说:
该命令可以在新线程,池化线程或中执行 调用线程,由Executor实现决定。
我的理解是,通过调用线程,它们意味着调用execute
命令的线程。
这在我的经历中从未发生过,所以我的问题是:这真的发生过吗?
由于调用Thread控制UI,我不能允许在调用Thread上进行额外的工作。我特别担心在使用ExecutorService
方法构造Executors.newFixedThreadPool(threads)
时是否会发生这种情况。
答案 0 :(得分:3)
ExecutorService
是定义广泛合同的界面。如果您查看实现,例如说ThreadPoolExecutor
,您将拥有更精确的特征:
ExecutorService,它使用可能的几个池化线程之一执行每个提交的任务,通常使用Executors工厂方法配置。
请注意,上面链接的javadoc详细说明了各种ExecutorService
工厂方法返回的Executors
为ThreadPoolExecutor
的事实。
所以更直接地回答你的问题: 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();
}
}