java - 寻找 Java 聪明的任务调度器和执行器

标签 java multithreading thread-safety scheduled-tasks scheduling

<分区>

在我自己偶然开发它之前,我正在寻找具有特定功能集的 Java 任务调度程序。

与其说它是一个调度程序,不如说它是一个逻辑门,它决定一组 (T) 中的哪些任务现在可以执行(例如传递给 ThreadPoolExecutor)以及哪些任务必须等待一些 future 的条件。

这是我想要实现的示例:考虑可能与每个任务关联的各种属性:

  • Foo:Foo 任务一次只能执行一个任务,因此 T.foo2T.foo1 完成之前无法启动,无论那里的执行能力有多大是。
  • Bar:Bar 任务没有并发限制,因此调度程序可以抛开警告,将 T.bar1T.barN 直接放入执行队列。
  • 如果任务被标记为具有属性 Foo Bar,则 Foo 属性将优先关于日程安排。

很简单,对吧?

有人知道这样的框架吗?

谢谢!

//尼古拉斯

最佳答案

在我看来,您想使用单独的执行程序。您可以为 Foo 使用 newFixedThreadPool(1),然后如果您真的想要,Bar 将使用 newCachedThreadPool()使其成为无限线程。

然后您将拥有一些包装器对象,这样您就可以submit(Foo foo)submit(Bar bar)submit(Object obj) 将测试 FooBar 并将其提交给正确的执行程序。像这样的东西:

public class FooBarExecutor {
    private ExecutorService fooExecutor = Executors.newFixedThreadPool(1000);
    private ExecutorService barExecutor = Executors.newCachedThreadPool();

    public <T> Future<T> submit(Foo foo) {
        return fooExecutor.submit(foo);
    }

    public <T> Future<T> submit(Bar bar) {
        return barExecutor.submit(bar);
    }

    public <T> Future<T> submit(Object obj) {
        if (obj instanceof Foo) {
            return submit((Foo)obj);
        } else if (obj instanceof Bar) {
            return submit((Bar)obj);
        } else {
           throw new IllegalArgumentException(
              "Object should be either Foo or Bar");
        }
    }
}

这假设 FooBar 都实现了 RunnableCallable。我也怀疑我是否正确使用了泛型,但你明白了。

关于java - 寻找 Java 聪明的任务调度器和执行器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9610759/

相关文章:

java - Java 中的 while 循环在线程完成之前循环

java - 从字符串而不是文件解析 XML 时出现问题

Java ArrayLists Order 和 ArrayLists 与 Vectors 的相对优点

python - 使用 `thread.join()` 时多线程卡住

c++ - 线程安全三角测量库

java - 图像处理

java - 使用并行流和原子变量期间发生的竞争条件

java - 在 Java 中创建多线程的正确方法?

c# - 从后台 C# 线程更新 pictureBox 是邪恶的吗?

c# - 如何使 ObservableCollection 线程安全?