Groovy スレッドに質問があります。
私の仕事は、特定のディレクトリ内の各ファイルを特定の方法で変換し、結果の出力を別のディレクトリ内のファイルに配置することです。
私は動作する次のコードを書きました:
static def translateDir(fromDir, targetDir) {
def allFiles = new File(fromDir).listFiles()
def numFiles = allFiles.length
for (i in 0..(numFiles - 1))
translate(allFiles[i].getAbsolutePath(), targetDir)
}
今、私はこのコードを次のように並列化しようとしました:
static def translateDir(fromDir, targetDir) {
def allFiles = new File(fromDir).listFiles()
def numFiles = allFiles.length
def numCores = Runtime.getRuntime().availableProcessors()
for (i in 0..(numCores - 1)) {
println("Thread " + i + "starting")
Thread.start {
for (def j = i; j < numFiles; j += numCores) {
println("j = " + j)
translate(allFiles[j].getAbsolutePath(), targetDir)
}
}
}
}
これは機能せず、出力を提供します:
Thread 0 starting
Thread 1 starting
Thread 2 starting
Thread 3 starting
私のテストケースでは、nunCores は 4 で、numFiles は 3 です。ここで何が起こっているのですか?