如何使这个简单的Groovy代码并发/多线程?

时间:2016-08-19 15:56:04

标签: groovy

我有一个非常简单的groovy脚本,它通过JSON工作并执行一些操作。由于JSON记录和操作之间没有依赖关系,我希望我可以加快执行速度。鉴于此代码......

def recordJSON = new JsonSlurper().parseText(myFile.text)

recordJSON.each{ 
    do stuff here
}

有没有办法线程执行或并行执行?我已经对这个主题做了一些阅读,但我是一个随便的编码器,他们似乎有点过头了。

2 个答案:

答案 0 :(得分:7)

最简单的方法是使用属于常规的GPars:

import static groovyx.gpars.GParsPool.withPool

withPool {
    recordJSON.eachParallel {
        do stuff here
    }
}

答案 1 :(得分:1)

如果您对Java线程构造更为熟悉,那么这可能会引起人们的兴趣(Groovy提供了所有常见的Java好东西,而且样板更少):

import java.util.concurrent.*
import groovy.json.*

class MyTask implements Runnable {
    File file

    void run() {
        def recordJSON = new JsonSlurper().parseText(file.text)
        println "do stuff here ${file.name}"
    }
}

// ------ main
def pool = Executors.newCachedThreadPool()

(1..6).each {
    def f = new File("f${it}.json")
    pool.submit(new MyTask(file: f))  
}