Ejemplo Java Callable Future

Uno de los beneficios del framework Java executor es que podemos ejecutar tareas simultáneas que pueden devolver un solo resultado después de procesar las tareas. La API de simultaneidad de Java logra esto con las siguientes dos interfaces Callable y Future.

Interfaces Java llamables y futuras

1.1. La interfaz llamable

Callable tiene el método call(). En este método, tenemos que implementar la lógica de una tarea. La interfaz Callable es una interfaz parametrizada, lo que significa que tenemos que indicar el tipo de datos que devolverá el método call().

2.2. La interfaz Future

Future tiene métodos para obtener el resultado generado por un objeto Callable y para administrar su estado.

Ejemplo futuro llamable de Java

En este ejemplo, estamos creando un FactorialCalculator que es de tipo Callable. Significa que anularemos su método call() y después del cálculo, devolveremos el resultado del método call(). Este resultado se puede recuperar más tarde de la referencia Future mantenida por el programa principal.

Ahora probemos la calculadora factorial anterior usando dos hilos y 4 números.

Salida del programa.

Aquí enviamos un objeto Callable para ser ejecutado en un ejecutor usando el método submit(). Este método recibe un objeto Callable como parámetro y devuelve un objeto Future que podemos usar con dos objetivos principales–

  1. Podemos controlar el estado de la tarea – podemos cancelar la tarea y comprobar si ha terminado. Para este propósito, hemos utilizado el método isDone() para verificar si las tareas habían terminado.
  2. podemos obtener el resultado devuelto por el método call (). Para ello, hemos utilizado el método get(). Este método espera hasta que el objeto Callable haya finalizado la ejecución del método call() y haya devuelto su resultado.

    Si el hilo se interrumpe mientras el método get() espera el resultado, lanza una excepción InterruptedException. Si el método call() lanza una excepción, este método lanza una excepción ExecutionException.

La interfaz Future proporciona otra versión del método get(), es decir, get (longtimeout, TimeUnitunit). Esta versión del método get, si el resultado de la tarea no está disponible, lo espera durante el tiempo especificado. Si el período de tiempo especificado pasa y el resultado aún no está disponible, el método devuelve un valor null.

Feliz Aprendizaje !!

¿Fue útil este post?

Háganos saber si le gustó la publicación. Es la única manera de mejorar.
No