我对 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。这里发生了什么?