2016-08-19 8 views
4

私はJSONを通して動作し、いくつかのアクションを実行するとても簡単なスクリプトを持っています。 JSONレコードとアクションとの間には依存関係がないので、実行を少しスピードアップすることができます。このコードが与えられた...この単純なGroovyコードを並行/マルチスレッド化するにはどうすればいいですか?

実行をスレッド化する方法と並行して実行する方法はありますか?私はその話題について少し読んだことがありますが、私はカジュアルなコーダーであり、彼らは私の頭を少し上回っているようです。

答えて

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)) 
} 
関連する問題