我需要在Jexl同时做几个动作。在官方指南中,我找到了注释@parallel:https://commons.apache.org/proper/commons-jexl/reference/syntax.html,但没有找到如何使用它的任何示例。
有人能举几个例子吗?
我以为会是这样的:
@parallel { a.someMethod() }
@parallel { b.someMethod() }但它似乎仍在按顺序工作。第二个例子,我已经尝试过,但仍然不起作用:
var loopFunction = function(title){
var i = 0;
logger:info("Starting "+title);
while(i<100) {
logger:info(title+"="+i);
utils:sleep(25);
i += 1;
}
logger:info("Ending "+title);
}
@parallel loopFunction('i');
@parallel loopFunction('j');发布于 2018-02-14 06:17:21
这似乎是注释的一个例子,在jexl码中,似乎只有synchronized是实现的。
@重写公共对象processAnnotation(字符串名称、Object[] args、可调用语句)引发异常{ if (“同步”.equals(名称)){最终对象arg = args;同步(Arg){返回statement.call();}引发新IllegalArgumentException(“未知注释”+名称)};
有一个并行测试,但它使用ExecutorService
/** *在NTHREADS中并行运行相同的测试函数。* @param任务任务* @param循环数循环执行* @param缓存,是否使用了jexl缓存*@如果有任何问题*@引发异常*/ @抑制警告(“装箱”)无效runThreaded(Class<?扩展java.util.concurrent.Executors.newFixedThreadPool(NTHREADS);ctask、int循环、布尔缓存)抛出异常{ if ( == 0) {=== MIX.length;} if (!cache) { jexl = jexlNoCache;}MIX.length{ jexl = jexlCache;对于(int = 0;t< NTHREADS;++t) {tasks.add(ctask,循环);} //让我们不要等待超过一分钟的List期货=execs.invokeAll(任务,60,TimeUnit.SECONDS);//检查所有返回的循环(未来:期货){Assert.assertEquals(Integer.valueOf(循环),future.get());}}
https://stackoverflow.com/questions/48769921
复制相似问题