用于管理任务的 Java 框架

我的问题是,Java中是否存在一个框架来管理和并发运行具有逻辑依赖关系的任务。

我的任务如下:我有很多独立的任务(比如说A,B,C,D...),它们被实现为命令(如命令模式)。我希望有一种执行器,它将接受所有这些任务并以并行方式执行它们。这些任务可以相互依赖(例如,我无法运行 C,在我运行 A 之前),同步或异步。

我还想合并自定义启发式方法来影响调度程序的执行,例如,如果任务 A 和 B 是 CPU 密集型的,而 C 具有高内存消耗,则并行运行 A 和 C 而不是运行 A 和 B 是有意义的。

在自己深入研究构建这些东西之前(我正在考虑java.util.concurrent +基于注释的约束/规则),我想知道,如果有人可以向我指出一些可以满足我需求的项目。提前致谢


答案 1

我不认为有一个框架来管理可以满足您要求的任务。使用命令模式,您走在正确的道路上。您可以查看 Akka 框架,了解简化的并发模型。Akka 基于 Actor 模型:

actor 模型是另一个非常简单的高级并发模型:执行组件不能一次响应多封邮件(邮件排队进入邮箱),只能通过发送邮件进行通信,而不能共享变量。只要消息是不可变的数据结构(这在Erlang中总是正确的,但必须是语言中的约定,而没有办法确保此属性),一切都是线程安全的,不需要任何其他机制。这与Web开发MVC框架中的请求周期非常相似。http://metaphysicaldeveloper.wordpress.com/2010/12/16/high-level-concurrency-with-jruby-and-akka-actors/

Akka是用Scala编写的,但它公开了干净的Java API。


答案 2

我建议您检查用于此目的的可能性。虽然它被称为一种流行的构建工具,但它实际上是运行各种任务的XML控制引擎。我认为它的标志完全符合您的需求:并发运行任务。由于任何java应用程序都可以从其他java应用程序执行:只需调用其方法即可。在这种情况下,您可以使用 ant API 包装任务,即将它们实现为 Ant 任务。antantfork=trueantmain

我从未尝试过这种方法,但我相信它应该有效。几年前,我考虑过这个问题,并将其建议我的管理层作为类似问题的可能解决方案。