Groovy GPars, нужен индекс для каждого запущенного потока - PullRequest
0 голосов
/ 01 марта 2012

Используя GPars с Groovy, я запускаю 3 потока для параллельной работы ...

 GParsPool.withPool(3){ 
   result = myList.collectParallel{
      processItem(it)
   }
 }

Это прекрасно работает, но мне нужен индекс в замыкании, который представляет номер запущенного потока.Не уверен, как получить доступ к такому индексу, поскольку нет цикла;все происходит параллельно.

Я пытался использовать eachWithIndexParallel, но Groovy не жалуется на такой метод (ArrayList, Integer)

GParsPool.withPool(3) {
    result = myList.eachWithIndexParallel{ i -> 
        processItem( it, i)
    }
}

1 Ответ

2 голосов
/ 01 марта 2012

eachWithIndex () в Groovy передает два аргумента закрытию и не возвращает результата: GParsPool.withPool (3) {myList.eachWithIndexParallel {e, i -> processItem (e, i)}}, который объясняет, почему он не может найтиметод.

Однако необходимо соблюдать особую осторожность, чтобы получить результаты каждого из них потокобезопасным способом.

Один из способов получения идентификации потока, обрабатывающегоэлемент должен запросить метод Thread.currentThread () внутри замыкания.

...