Multithreading 如何在Groovy中并发运行循环?
到目前为止,我在groovy中有如下代码Multithreading 如何在Groovy中并发运行循环?,multithreading,concurrency,groovy,Multithreading,Concurrency,Groovy,到目前为止,我在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) HashMap=newhashmap() 对于(char i='a';i,有一个名为的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)
HashMap=newhashmap()
对于(char i='a';i,有一个名为的Groovy扩展。它支持多种并发技术,如Fork/Join或Actor模型。使用GPAR,您的代码可能如下所示(我无法确切了解您在迭代什么):
导入groovyx.gpars.GParsPool
映射映射=[:]作为ConcurrentMap
GParsPool.withPool{
chars.eachParallel{i->
def name=getName(i)
def info=getInfo(一)
使用Java流映射[名称]:
您还可以使用foldParallel
来删除外部初始化的map
@tim我认为GPAR已经在1.8中迁移到了核心Groovy,是吗?哎呀,for循环应该是“a”到“z”,而不是“a”到“a”。我将这些字符附加到URL的末尾,以获取和索引网页的内容ges@Don它在groovy中作为一个jar分发,但它不是groovy核心的一部分,所以您仍然需要将它添加到classpath@Grrrrr在本例中,您可以编写(“a”。“z”).eachParallel{i->
,它使用Groovy范围从a到z。
import groovyx.gpars.GParsPool
Map map = [:] as ConcurrentMap
GParsPool.withPool {
chars.eachParallel { i ->
def name = getName(i)
def info = getInfo(i)
map[name] << info
}
}
Stream.of("a", "b", "c", "a1", "b1", "c1", "a2", "b2", "c2")
.parallel()
.forEach({ println it })