Interfaz Runnable VS Callable en Java
-
La interfaz
Runnable
en Java -
El ejemplo de interfaz
Runnable
en Java -
La interfaz
Callable
en Java -
El ejemplo de interfaz
Callable
en Java -
Interfaz
Runnable
VSCallable
en Java
Este tutorial presenta la diferencia entre las interfaces Runnable
y Callable
con ejemplos en Java.
La interfaz Runnable
en Java
Runnable
es una interfaz utilizada para crear y ejecutar subprocesos en Java. Tiene un solo método abstracto run()
solamente y también se conoce como una interfaz Funcional
.
Puede ver la firma de la interfaz Runnable
y su método SAM a continuación.
@FunctionalInterface public interface Runnable
void run() // Single Abstract Method
El ejemplo de interfaz Runnable
en Java
Cada clase que quiera crear y ejecutar un subproceso debe implementar una interfaz Runnable
o extender la clase Thread
.
La interfaz Runnable
proporciona un método run()
que debe anularse en la clase base. Este método se ejecuta implícitamente por el método start()
. Vea el ejemplo a continuación.
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");
}
}
Producción :
Running a thread
La interfaz Callable
en Java
El Callable
es una interfaz y es similar a la interfaz Runnable
. También contiene un único método abstracto, call()
.
Esta interfaz está diseñada para clases cuyas instancias son potencialmente ejecutadas por otro subproceso. La firma de la interfaz y el método Callable
se encuentra a continuación:
La clase Executors
contiene métodos de utilidad para convertir a clases Callable
desde otras formas comunes.
@FunctionalInterface public interface Callable<V>
V call() throws Exception
El ejemplo de interfaz Callable
en Java
Implementamos la interfaz Callable
y anulamos su método call()
. Podemos hacer llegar cualquier objeto al método call()
.
Vea el ejemplo a continuación.
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;
}
}
Producción :
product 276
Interfaz Runnable
VS Callable
en Java
La siguiente tabla contiene algunos puntos para comprender la interfaz Runnable
y Callable
de Java.
Runnable |
Callable |
---|---|
La clase implementadora debe anular su método run() en consecuencia. |
La clase implementadora debe anular su método call() en consecuencia. |
El tipo de devolución del método run() es nulo, por lo que no devuelve nada a la persona que llama. |
El tipo de retorno del método call() es un Objeto. Puede ser una cadena, un entero, etc. |
El método run() no lanza ninguna excepción. |
El método call() puede lanzar una excepción durante la ejecución. |
Se puede utilizar para crear subprocesos en Java. | No se puede utilizar para crear hilos. |