2016-08-19 208 views
4

我有一个非常简单的groovy脚本,通过JSON工作并执行一些操作。由于JSON记录和操作之间没有依赖关系,我希望能够加快执行速度。鉴于这种代码...如何让这个简单的Groovy代码并发/多线程?

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

recordJSON.each{ 
    do stuff here 
} 

是否有线程执行或并行执行它们的方法吗?我已经做了一些关于这个话题的阅读,但我是一个休闲的编码员,他们似乎有点凌驾于我的头上。

回答

7

最简单的方法是使用GPars这是常规部分:

import static groovyx.gpars.GParsPool.withPool 

withPool { 
    recordJSON.eachParallel { 
     do stuff here 
    } 
} 
+0

哇,非常感谢。这确实很容易,我将样本量缩短了近75% – dscl

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)) 
}