首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于队列内容的Android多线程作业执行器

基于队列内容的Android多线程作业执行器
EN

Stack Overflow用户
提问于 2016-06-18 10:02:06
回答 2查看 794关注 0票数 1

我正在开发一个android应用程序,在该应用程序中,我正在执行许多后台任务。要求是所有的请求都应该是串行处理的,并且可以并行执行。例如:假设我一个接一个地收到任务请求。要添加这些任务,我需要维护一个请求队列。假设当前队列状态为

(Head) Task1 -> Task2 - Task3 - Task4 -Task5 - Task6 (Tail)

我有一个并行执行任务的线程池。Executor总是挑选头部的任务,并提交到线程池中执行。在我的需求中,有时我需要从队列中删除不再需要的任务。并且设计是这样的,即删除不再需要的旧任务。假设Task1和Task2正在由线程池执行,而其余任务在队列中等待。当前队列状态为

(头部) Task3 - Task4 -Task5 - Task6 (尾部)

假设进行了一个调用来删除旧任务,即Task3和Task4。应该删除这些任务,并将Task4作为线程池的下一个任务提交。

我需要:我需要一个作业管理器来管理这些操作,比如1.连续检查请求队列并将任务分派到线程池2.每当调用removeTask时,删除任务,然后继续从队列中分派事件,直到队列变为空3.如果队列变为空,则线程需要等待/休眠,直到下一个请求进入队列。4.任务管理器应监控和挑选队列中的任务并在executor服务中执行,当队列为空时进入等待状态或睡眠状态,当队列中有项目并继续时唤醒执行任务。5. (重要)我希望在访问请求队列时优先考虑UI线程。

我所拥有的: 1. UI线程和作业管理器(另一个后台线程)共享的请求队列的原子引用2.就绪任务

我想过用

代码语言:javascript
运行
复制
while(true) {    
//check for any items in the queue and execute
}

在作业管理器中运行()方法,但在队列为空时不必要地消耗CPU

请为我提供jobManager的逻辑。

还有一个问题。创建请求队列的原子引用能确保线程安全吗?或者我应该使请求队列变量同步?

EN

回答 2

Stack Overflow用户

发布于 2016-06-18 11:19:45

下面是安卓文档中关于线程池和最佳实践的一些信息:https://developer.android.com/training/multiple-threads/index.html

它们提供了有关如何创建和使用线程池来处理后台操作的示例。

票数 2
EN

Stack Overflow用户

发布于 2016-06-18 10:22:55

请为我提供jobManager的逻辑。

您不需要从头开始实现此功能。相反,只需使用ExecutorService API即可。

据我所知,您尝试做的所有事情都可以使用该API来完成。甚至可以处理给予UI线程优先级访问的要求;例如,使用PriorityQueue

(坦率地说)从头开始实现一个作业管理器来满足这些需求是毫无意义的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37892583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档