Interfaz Runnable VS Callable en Java

Mohammad Irfan 12 octubre 2023
  1. La interfaz Runnable en Java
  2. El ejemplo de interfaz Runnable en Java
  3. La interfaz Callable en Java
  4. El ejemplo de interfaz Callable en Java
  5. Interfaz Runnable VS Callable en Java
Interfaz Runnable VS Callable 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.