L'interface appelée est similaire à Runnable, qui peut être vu à partir du nom, mais Runnable ne renvoie pas le résultat et ne peut pas lancer une exception qui renvoie le résultat. .
La copie de code est la suivante:
package com.future.test;
import java.io.filenotfoundException;
Importer java.io.ioException;
import java.util.concurrent.Callable;
Importer java.util.concurrent.executionException;
Importer java.util.concurrent.executorService;
Importer java.util.concurrent.executors;
Importer java.util.concurrent.futureTask;
Importer java.util.concurrent.TimeUnit;
Importer java.util.concurrent.TimeOutException;
classe publique MyTest {
// reçoit l'exception prise dans la méthode d'exécution, puis la méthode personnalisée lance l'exception
// Exception lancinable statique privée;
/ **
* @param args
* /
public static void main (String [] args) {
// Talage de méthode générée automatiquement de TODO
Résultat de chaîne = "";
ExecutorService exécutor = exécutor.NewSingLethreAdExecutor ();
FutureTask <string> futur =
Nouveau FutureTask <string> (nouveau callable <string> () {// Utilisez l'interface appelée comme paramètre du constructeur
Call de chaîne publique () {
// La tâche réelle est exécutée ici, le type de valeur de retour ici est une chaîne, qui peut être de n'importe quel type
essayer {
Thread.Sleep (10000);
} catch (InterruptedException e) {
// Bloc de capture généré automatiquement de TODO
// exception = e;
//e.printStackTrace ();
}
retourner "11111";
}});
exécuteur.Exécute (futur);
// Vous pouvez faire n'importe quoi d'autre ici
essayer {
result = futur.get (5000, timeunit.milliseconds); Vous pouvez également utiliser Future.get () pour obtenir des résultats sans définir le délai d'exécution.
} catch (InterruptedException e) {
//System.out.println("task a été annulé ");
futur.cancel (true);
} catch (ExecutionException e) {
futur.cancel (true);
} catch (timeoutException e) {
futur.cancel (true);
} enfin {
exécuteur.shutdown ();
}
System.out.println ("Résultat:" + Résultat);
}
/ * public void throwException () lève filenotfoundException, ioException {
if (exception instance de filenotfoundException)
exception (filenotfoundException);
if (exception instance of ioexception)
lancer une exception (ioException);
} * /
}