Junior
Quelle est la différence entre les interfaces Callable et Runnable?
sobes.tech IA
Réponse de l'IA
Runnable - c'est une interface fonctionnelle représentant une tâche pouvant être exécutée par un thread. Elle possède une méthode run(), qui ne prend pas d'arguments1 et ne retourne pas de valeur. Elle est utilisée pour exécuter des opérations en arrière-plan ne nécessitant pas de résultat.
Callable - c'est une interface paramétrée représentant également une tâche pouvant être exécutée par un thread. Elle possède une méthode call(), qui retourne un type générique <V> (une valeur arbitraire)2 et peut lancer une exception (Exception). Elle convient pour les tâches dont le résultat doit être utilisé.
Principales différences :
| Caractéristique | Runnable |
Callable |
|---|---|---|
| Valeur de retour | Non | Oui (type {@code <V>}) |
| Exceptions | Non (méthode {@code run}) | Oui (méthode {@code call}) |
| Méthode | {@code void run()} | {@code V call() throws Exception} |
| Utilisation | {@code java.lang.Runnable} | {@code java.util.concurrent.Callable} |
Exemple d'utilisation de Runnable :
// Implémentation de Runnable :
Runnable task = new Runnable() {
@Override
public void run() {
// Effectue une opération sans retourner de résultat
System.out.println("Runnable task executed");
}
};
// Lancer dans un thread :
new Thread(task).start();
Exemple d'utilisation de Callable :
// Implémentation de Callable :
Callable<String> task = new Callable<String>() {
@Override
public String call() throws Exception {
// Effectue une opération et retourne un résultat :
return "Callable task executed with result";
}
};
// Lancer avec ExecutorService :
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(task);
try {
// Obtenir le résultat :
String result = future.get();
System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
} finally {
executor.shutdown();
}