我正在寻找一个具有特定功能集的Java任务调度程序,然后我自己偶然发现它。
这不是一个调度程序,而是一个逻辑门,它确定一组( T )中的哪些任务现在可以执行(例如传递给ThreadPoolExecutor)以及哪些任务必须等待一些未来的条件。
这是我想要实现的示例:考虑可能与每个任务相关联的各种属性:
简单,对吧?
任何人都知道这样的框架吗?
谢谢!
//尼古拉斯
答案 0 :(得分:3)
在我看来,您想要使用单独的执行程序。您可以newFixedThreadPool(1)
Foo
,然后Bar
使用newCachedThreadPool()
,如果您真的想让它成为无限的线程。
然后你会有一些包装器对象,所以你可以submit(Foo foo)
,submit(Bar bar)
或submit(Object obj)
来测试Foo
或Bar
并提交给它正确的执行人。类似的东西:
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");
}
}
}
这假设Foo
和Bar
都实现Runnable
或Callable
。我也怀疑我是否正确使用了仿制药,但你明白了。
答案 1 :(得分:1)
我不确定这对你的案例是否有点过分,但 Java应用程序的任务调度程序是Quartz。值得一看。
答案 2 :(得分:1)
Quartz确实有扩展点,这可能有助于在作业处理上做出这些决定。看看:
public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context)
。