阅读this guide关于如何分析直接从相机馈送的图像;在页面底部的代码示例中,突然弹出一个新变量executor:

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

查一查,Executor只是另一个并行化抽象.现在,我怎么才能得到一个呢?有这样的东西吗?

androidThreadPool.getExecutor()

实际上,我找到了一个:

Context.getMainExecutor()

如果我理解正确的话,这将在主线程上执行Runnable.然而,我假设为ImageAnalyzer提供一个执行器的目的是要在主线程上运行它.

或者我必须创建我自己的遗嘱执行人?这是通常的做法吗?

推荐答案

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

不,不是"又一个".Executors框架是Java发展过程中的一个重要里程碑.该框架减轻了Java程序员管理线程的负担,使并发工作变得简单得多.

ExecutorService, not Executor

Executor接口是not最常用的部件.该接口定义了execute方法,该方法may在后台线程上运行任务,或者也可以在当前线程上运行任务.

如果您知道您需要一个后台线程,那么可以使用ExecutorService子接口的实现及其方法,比如submit.

我怎么才能买到一辆

通常,我们通过在Executors类上调用一个方便的工厂方法来获得ExecutorService的未指定实现.

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

ExecutorService es = Executors.newCachedThreadPool() ;

您可能需要由一定数量的线程池支持的Executor服务.

ExecutorService es = Executors.newFixedThreadPool( maxThreadsCount ) ;

在现代Java版本21+中,我们在大多数情况下使用virtual threads.我想Android不会提供虚拟线程,短期内也不会.

ExecutorService es = Executors.newVirtualThreadPerTaskExecutor() ;

这些Executor服务中的任何一个都可以运行您定义为RunnableCallable的任务.

或者我必须创建我自己的遗嘱执行人?

不,这是一种非常罕见的情况,您需要定制的Executor服务.

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

不是的.

Executors框架的目的是处理处理线程和任务的底层细节.有几个优秀的ExecutorService实现与JavaBundle 在一起,通过Executors类提供给您.


上一篇:我不懂Android我的 comments 适用于Java平台.我的 comments 可能也适用于Android;我只是不知道.

Java相关问答推荐

Java中后期绑定的替代概念

为什么Java的代码工作(if condition内部的实例)

使用标记时,场景大纲不在多个线程上运行

通过合并Akka Streams中的多个慢源保持订购

在JavaFX项目中注册组合框的控件FX验证器时,模块系统出错

Spring Boot 3.2.2中的@Inject和@Resource Remove

我无法获取我的Java Spring应用程序的Logback跟踪日志(log)输出

CompleteableFuture是否运行在不同的内核上?

自定义批注的外推属性值

在Java中将int[]矩阵添加到ArrayList中,但出现错误

在macOS上读取文件会导致FileNotFound,即使文件存在(并且具有权限)

项目react 堆中doOnComplete()和Subscribe()的第三个参数之间的差异

在Oracle db中,当我们提供字符串而不是数字时,比较是如何工作的?

在Java泛型中使用通配符时,如何推断类型

无限递归Java问题

从字节数组切换到JakartaMail org.springframework.mail.javamail.JavaMailSender InputStreamResource

设置背景时缺少Android编辑文本下划线

放置在变量中的Java成员引用不相等

如何在Java中正确实现填字游戏求解器

单例模式中热切初始化和惰性初始化的区别