0

Groovy で GPars を使用して、3 つのスレッドを起動していくつかの作業を並行して行います...

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

これは正常に動作しますが、起動されたスレッド番号を表すクロージャーにインデックスが必要です。ループがないため、そのようなインデックスにアクセスする方法がわかりません。すべてが並行して起こっています。

、これを使用してみeachWithIndexParallelましたが、Groovy は (ArrayList, Integer) に対してそのようなメソッドがないと文句を言います

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

1 に答える 1

2

Groovy の eachWithIndex() は 2 つの引数をクロージャーに渡し、結果を返しません。

ただし、スレッドセーフな方法で each から結果を取得するには、特別な注意が必要です。

要素を処理するスレッドの ID を取得する 1 つの方法は、クロージャー内の Thread.currentThread() メソッドを照会することです。

于 2012-03-01T05:36:18.090 に答える