2011-08-09 46 views
4

截至目前我有一個像在常規如何在Groovy中同時運行循環?

HashMap map = new HashMap() 
    for(char i='a'; i<='z'; i++) { 
     def name = getName(i) 
     def info getInfo(i) 
     map.put(name, info) 
    } 
    serializeMap(map) 

什麼是Groovy中同時運行這個循環的最佳方式下面的代碼?

回答

7

有可用Groovy擴展名爲GPars。它支持多種併發技術,如Fork/Join或Actor模型。使用GPars,你的代碼看起來是這樣的(我想不出你迭代正是以上):

import groovyx.gpars.GParsPool 

Map map = [:] as ConcurrentMap 

GParsPool.withPool { 
    chars.eachParallel { i -> 
    def name = getName(i) 
    def info = getInfo(i) 
    map[name] << info 
    } 
} 
+1

你可以使用'foldParallel'以及刪除的外部初始化'map' –

+0

要求@tim我認爲GPars已經在1.8中移植到了核心Groovy中,對嗎? –

+0

oops,for循環假設是'a'到'z'而不是'a'到'a'。我將這些字符附加到URL的末尾以獲取和索引網頁內容。 – Sap