如何获得执行人?

问题描述 投票:0回答:1

阅读本指南,了解如何分析直接从相机馈送的图像;在页面底部的代码示例中突然弹出一个新变量

executor
:

imageAnalysis.setAnalyzer(executor, ImageAnalysis.Analyzer { imageProxy ->

查了一下,Executor只是另一种并行化抽象。现在,我如何获得一个?有这样的事吗

androidThreadPool.getExecutor()

实际上,我找到了一个:

Context.getMainExecutor()

如果我理解正确的话,这将在主线程上执行 Runnable。但是,我认为向 ImageAnalyzer 提供 Executor 的目的是而不是在主线程上运行它。

或者我必须创建自己的执行器吗?这是常见做法吗?

java android kotlin parallel-processing google-mlkit
1个回答
0
投票

执行器只是另一种并行化抽象

不,不是“只是另一个”。 Executors 框架是 Java 发展过程中的一个重要里程碑。这个框架减轻了 Java 程序员管理线程的负担,使并发工作变得更加简单。

ExecutorService
,不是
Executor

Executor
界面是不是最常用的部分。该接口定义了
execute
方法,该方法可以在后台线程上运行您的任务,也可以在当前线程上运行该任务。

如果您知道需要后台线程,请使用

ExecutorService
接口及其方法(如
submit
)的实现。

如何获得

通常,我们通过调用 ExecutorService

 类上的便捷工厂方法来获得 
Executors
 的未指定实现。

您可能需要一个由任意数量的线程池支持的执行程序服务。仅当您知道同时执行的任务数量有限时才使用此选项,以免机器负担过重。

ExecutorService es = Executors.newCachedThreadPool() ;

您可能需要一个由一定数量的线程池支持的执行程序服务。

ExecutorService es = Executors.newFixedThreadPool( maxThreadsCount ) ;

在现代 Java 21+ 版本中,我们可能会使用 虚拟线程 来实现大多数目的。我认为 Android 不提供虚拟线程,而且很快也不会提供。

ExecutorService es = Executors.newVirtualThreadPerTaskExecutor() ;

这些执行器服务中的任何一个都可以运行您定义为

Runnable
Callable
的任务。

或者我必须创建自己的执行器吗?

不,这种情况非常罕见,您需要自定义执行器服务。

[创建我自己的执行者]这样做是常见做法吗?

没有。

执行器框架的目的是避免处理线程和任务的低级细节。

ExecutorService
的几个良好实现与 Java 捆绑在一起,通过
Executors
类提供给您。


警告:我不了解 Android。我这里的评论适用于 Java 平台。我的评论可能也适用于Android;我只是不知道。

© www.soinside.com 2019 - 2024. All rights reserved.