Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jexl并行处理示例_Java_Jexl - Fatal编程技术网

Java Jexl并行处理示例

Java Jexl并行处理示例,java,jexl,Java,Jexl,我需要在Jexl中同时执行多个操作。在官方指南中,我找到了注解@parallel: 但是我没有找到任何使用它的例子 有人能举一些例子吗 我想它会像这样工作: @parallel { a.someMethod() } @parallel { b.someMethod() } 但它似乎仍在按顺序工作。 我尝试过的第二个示例仍然不起作用: var loopFunction = function(title){ var i = 0; logger:info("Starting "+ti

我需要在Jexl中同时执行多个操作。在官方指南中,我找到了注解@parallel: 但是我没有找到任何使用它的例子

有人能举一些例子吗

我想它会像这样工作:

@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');
var loopFunction=函数(标题){
var i=0;
记录器:信息(“开始”+标题);

虽然(i它似乎是注释的一个示例,但在中,似乎只实现了
同步的


当你说“它仍在按顺序工作”时,这意味着什么?你是如何检查的?我试图通过日志记录向这个方法添加大循环(5秒)。我在
a.somethod()
log之后得到了
b.somethod()
log。也许可以尝试在
utils.sleep
中使用随机时间(这样我和j就有了不同的等待时间)。如果它不能解决问题,我将让jexl专业人士帮助您:p尝试不同的计时,不同的循环长度。它仍然打印
开始I I=1…I=100结束I开始j=1…j=250结束j
@Override
public Object processAnnotation(String name, Object[] args,Callable<Object> statement) throws Exception {

    if ("synchronized".equals(name)) {
        final Object arg = args[0];
        synchronized(arg) {
            return statement.call();
        }
    }
    throw new IllegalArgumentException("unknown annotation " + name);
}
/**
     * Run same test function in NTHREADS in parallel.
     * @param ctask the task / test
     * @param loops number of loops to perform
     * @param cache whether jexl cache is used or not
     * @throws Exception if anything goes wrong
     */
    @SuppressWarnings("boxing")
    void runThreaded(Class<? extends Task> ctask, int loops, boolean cache) throws Exception {
        if (loops == 0) {
            loops = MIX.length;
        }
        if (!cache) {
            jexl = jexlNoCache;
        } else {
            jexl = jexlCache;
        }
        java.util.concurrent.ExecutorService execs = java.util.concurrent.Executors.newFixedThreadPool(NTHREADS);
        List<Callable<Integer>> tasks = new ArrayList<Callable<Integer>>(NTHREADS);
        for (int t = 0; t < NTHREADS; ++t) {
            tasks.add(jexl.newInstance(ctask, loops));
        }
        // let's not wait for more than a minute
        List<Future<Integer>> futures = execs.invokeAll(tasks, 60, TimeUnit.SECONDS);
        // check that all returned loops
        for (Future<Integer> future : futures) {
            Assert.assertEquals(Integer.valueOf(loops), future.get());
        }
    }