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

问题描述 投票:2回答:2

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

该命令可以在Executor实现的判断下在新线程,池化线程或调用线程中执行。

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

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

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

java android
2个回答
3
投票

ExecutorService是一个界定广泛合同的界面。如果你看一下实现,例如ThreadPoolExecutor,你会有更精确的特征:

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

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

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


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();    
    }  
}
© www.soinside.com 2019 - 2024. All rights reserved.