当前位置: 首页 > 知识库问答 >
问题:

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

徐学潞
2023-03-14

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

(头)任务1-

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

(头部)任务3-任务4-任务5-任务6(尾部)

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

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

我拥有的:1。UI线程和作业管理器(另一个反向线程)2共享的请求队列的原子引用。准备好的任务

我想用

while(true) {    
//check for any items in the queue and execute
}

在job manager run()方法中,但当队列为空时,这会不必要地消耗CPU

请为我提供jobManager的逻辑。

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

共有2个答案

卫学真
2023-03-14

请为我提供jobManager的逻辑。

您不需要从头开始实现它。相反,只需使用ExecutorServiceAPI。

据我所知,您尝试做的所有事情都可以使用该API完成。甚至可以处理给予UI线程优先访问权的要求;e、 g.使用优先队列。

从零开始实施作业管理器以满足这些需求(坦率地说)是毫无意义的。

楚知
2023-03-14

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

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

 类似资料:
  • null 所以你可以不受任何限制地做背景工作。尽管由于这些原因您应该使用服务,但链接。 这是做背景工作的另一种方式(当然不是更好,但仍然是一种方式)吗?我错了吗?

  • 我确信这两个列表都不是空的,并且正在调用,但是没有调用order execution run方法....

  • 本文向大家介绍基于C#实现的轻量级多线程队列图文详解,包括了基于C#实现的轻量级多线程队列图文详解的使用技巧和注意事项,需要的朋友参考一下 前言 工作中我们经常会遇到一些一些功能需要实现造作日志,数据修改日志,对于这种业务需求如果我们以同步的方式实现,难免会影响到系统的性能。如下我列出集中解决方案。 使用Thread异步处理。 使用线程池或Task异步处理。 以上两种方案确实能解决我们此场景的需求

  • 默认情况下,C++容器应该是线程安全的。我必须错误地使用多线程,因为对于此代码: 我得到了:

  • 我有一个场景,其中多个线程正在写入同一队列。 Appender线程从不同的市场(每个线程都是单一市场)接收更新,并将这些数据推入相同的队列:

  • 如何将CronTimer迭代器设置为1?或者如何停止排定程序多次执行作业。 有什么建议吗?谢谢,古扬·沙阿。