Как запустить цикл одновременно в Groovy? - PullRequest
6 голосов
/ 09 августа 2011

На данный момент у меня есть код, подобный следующему в 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?

Ответы [ 2 ]

10 голосов
/ 09 августа 2011

Доступно расширение 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
  }
}
2 голосов
/ 10 апреля 2018

Использование потоков Java:

Stream.of("a", "b", "c", "a1", "b1", "c1", "a2", "b2", "c2")
        .parallel()
        .forEach({ println it })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...