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

Java 基于队列内容的Android多线程作业执行器,java,android,multithreading,synchronization,thread-safety,Java,Android,Multithreading,Synchronization,Thread Safety,我正在开发一个android应用程序,在这个应用程序中我执行了很多后台任务。要求是所有的请求都应该串行处理,并且可以并行执行。 假设我一个接一个地收到任务请求。要添加这些任务,我需要维护一个请求队列。假设当前队列状态为 (头)任务1->任务2-任务3-任务4-任务5-任务6(尾) 我有一个并行执行任务的线程池。执行者总是在头上选择任务并提交给线程池执行。 在我的需求中,有时我需要从队列中删除不再需要的任务。而且设计是这样的,即删除不再需要的旧任务。假设线程池正在执行Task1和Task2,而其余

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

(头)任务1->任务2-任务3-任务4-任务5-任务6(尾)

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

(负责人)任务3-任务4-任务5-任务6(负责人)

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

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

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

我想用

while(true) {    
//check for any items in the queue and execute
}
在作业管理器run()方法中,但当队列为空时,这会不必要地消耗CPU

请为我提供jobManager的逻辑

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

请为我提供jobManager的逻辑

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

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


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

以下是Android文档中关于线程池和最佳实践的一些信息:


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

Thank you@srayhunter。我已经有了线程池,可以在从请求队列中选择后执行任务。我需要一个自定义作业管理器来根据我的要求管理请求队列(即优先考虑UI线程,并在必要时从队列中删除任务,允许串行执行任务),这不是简单的
HandlerThread
实现您想要的吗?请查看磁带模式,您能否提供一些有关在进行HTTP请求时使用
ExecutorServices
的示例?另外,根据HTTP响应执行一些操作。