Groovy de la simultanéité

J'ai une question à Groovy threads.

Ma tâche est de traduire chaque fichier dans un répertoire donné, d'une certaine façon
et place le résultat dans un fichier dans un autre répertoire.

J'ai écrit le code suivant qui fonctionne:

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)
}

Maintenant, j'ai essayé de paralléliser ce code comme ceci:

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)
            }
        }
    }
}

qui ne fonctionne pas et fournit la sortie:

Thread 0 starting
Thread 1 starting
Thread 2 starting
Thread 3 starting

nunCores est de 4, et numFiles est 3 dans mon cas de test.
Ce qui se passe ici?

OriginalL'auteur Sven Hager | 2012-05-28