Interface Runnable VS Callable en Java
-
L’interface
Runnableen Java -
L’exemple d’interface
Runnableen Java -
L’interface
Callableen Java -
L’exemple d’interface
Callableen Java -
Interface
RunnableVSCallableen Java
Ce tutoriel présente la différence entre les interfaces Runnable et Callable avec des exemples en Java.
L’interface Runnable en Java
Runnable est une interface utilisée pour créer et exécuter des threads en Java. Il n’a qu’une seule méthode abstraite run() et est également connu sous le nom d’interface Functional.
Vous pouvez voir la signature de l’interface Runnable et sa méthode SAM ci-dessous.
@FunctionalInterface public interface Runnable
void run() // Single Abstract Method
L’exemple d’interface Runnable en Java
Chaque classe qui souhaite créer et exécuter un thread doit implémenter soit une interface Runnable, soit étendre la classe Thread.
L’interface Runnable fournit une méthode run() qui doit être surchargée dans la classe de base. Cette méthode s’exécute implicitement par la méthode start(). Voir l’exemple ci-dessous.
public class SimpleTesting implements Runnable {
public static void main(String[] args) {
new Thread(new SimpleTesting()).start();
}
@Override
public void run() {
System.out.println("Running a thread");
}
}
Production :
Running a thread
L’interface Callable en Java
Le Callable est une interface et est similaire à l’interface Runnable. Il contient également une seule méthode abstraite, call().
Cette interface est conçue pour les classes dont les instances sont potentiellement exécutées par un autre thread. La signature de l’interface et de la méthode Callable est ci-dessous :
La classe Executors contient des méthodes utilitaires pour convertir en classes Callable à partir d’autres formes courantes.
@FunctionalInterface public interface Callable<V>
V call() throws Exception
L’exemple d’interface Callable en Java
Nous avons implémenté l’interface Callable et remplacé sa méthode call(). Nous pouvons obtenir n’importe quel objet à la méthode call().
Voir l’exemple ci-dessous.
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class SimpleTesting implements Callable<Integer> {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService executorService = Executors.newSingleThreadExecutor();
SimpleTesting st = new SimpleTesting();
Future<Integer> future = executorService.submit(st);
int result = future.get().intValue();
System.out.println("product " + result);
}
@Override
public Integer call() throws Exception {
int product = 23 * 12;
return product;
}
}
Production :
product 276
Interface Runnable VS Callable en Java
Le tableau suivant contient quelques points pour comprendre l’interface Runnable et Callable de Java.
Runnable |
Callable |
|---|---|
La classe d’implémentation doit surcharger sa méthode run() en conséquence. |
La classe d’implémentation doit surcharger sa méthode call() en conséquence. |
Le type de retour de la méthode run() est void donc ne retourne rien à l’appelant. |
Le type de retour de la méthode call() est un objet. Il peut s’agir d’une chaîne, d’un entier, etc. |
La méthode run() ne lève aucune exception. |
La méthode call() peut lever une exception lors de l’exécution. |
| Il peut être utilisé pour créer des threads en Java. | Il ne peut pas être utilisé pour créer des threads. |