Exécuteur testamentaire de Service - délai de fil

Alors que j'étais à explorer ExecutorService, j'ai rencontré une méthode Future.get() qui accepte le timeout.

La Java doc de cette méthode, dit


Attend, si nécessaire, pour, au plus, le temps donné pour le calcul à effectuer, puis récupère son résultat, si disponible.

Paramètres:

délai la durée maximale d'attente

unité l'unité de temps de la temporisation argument


Selon ma compréhension, nous impose un délai d'attente sur les callable, nous soumettre à la ExecutorService de sorte que, mon callable sera interrompre après le délai spécifié(timeout) a passé

Mais comme par code ci-dessous, la longMethod() semble être en cours d'exécution au-delà du délai(2 secondes), et je suis vraiment confus à comprendre cela. Quelqu'un peut-il svp m'indiquer le bon chemin?

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class Timeout implements Callable<String> {

    public void longMethod() {
        for(int i=0; i< Integer.MAX_VALUE; i++) {
            System.out.println("a");
        }
    }

    @Override
    public String call() throws Exception {
        longMethod();
        return "done";
    }


    /**
     * @param args
     */
    public static void main(String[] args) {
        ExecutorService service = Executors.newSingleThreadExecutor();

        try {
            service.submit(new Timeout()).get(2, TimeUnit.SECONDS);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


}
En plus des réponses, notez que même si la tâche a été interrompue, car il ne vérifie jamais les interrompre drapeau de toute façon, il continuera à courir jusqu'à la fin.

OriginalL'auteur sanbhat | 2013-04-29