2016-08-19 85 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)) 
}