logo

Ejemplo futuro de Java

En Java , Futuro es un interfaz que pertenece a java.util.concurrente paquete . Se utiliza para representar el resultado de un cálculo asincrónico. La interfaz proporciona los métodos para verificar si el cálculo se completó o no, esperar a que se complete y recuperar el resultado del cálculo. Una vez que se completa la tarea o el cálculo, no se puede cancelar el cálculo.

Sintaxis:

 public interface Future 

Ejemplo del futuro de Java

El mejor ejemplo de Java Future es Servicio Ejecutor interfaz. Produce un objeto Future (a partir de algunos de sus métodos) para rastrear el progreso de una o más tareas asincrónicas.

Métodos de la interfaz del futuro

La interfaz proporciona los siguientes cinco métodos:

Método Descripción
Cancelar() Intenta cancelar la ejecución de la tarea.
conseguir() El método espera, si es necesario, a que se complete el cálculo y luego recupera su resultado.
conseguir() Espera, si es necesario, como máximo el tiempo indicado para que se complete el cálculo y luego recupera su resultado, si está disponible.
está cancelado() Devuelve verdadero si la tarea se canceló antes de su finalización.
está hecho() Devuelve verdadero si se completa la tarea.

Hubo algunas deficiencias en la interfaz Future que son las siguientes:

  • Con Future, el cálculo no se puede completar manualmente.
  • No avisa una vez finalizada la conmutación.
  • Su cadena no se puede crear ni combinar.

Para superar las limitaciones anteriores, Java 8 introducido Futuro Completable .

convertir cadena a int java

Uso del futuro en programación asincrónica

Obteniendo resultado

Como hemos comentado anteriormente, el Futuro representa el resultado de una tarea asincrónica. Para recuperar el resultado de esa tarea asincrónica, la interfaz Java Future proporciona las dos versiones siguientes de los métodos get() y ambas devuelven un objeto. Tenga en cuenta que el tipo de devolución puede ser un tipo genérico. Por ejemplo:

 Future future = ... // get Future by starting async task // do something else, until ready to check result via Future // get result from Future try { Object result = future.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } 

Nota: Si intentamos invocar el método get() antes de que se complete la tarea asincrónica, el método get() se bloqueará hasta que el resultado esté listo.

Para superar la deficiencia anterior, la interfaz Future proporciona otra versión del método get() que exceptúa una cantidad de tiempo (en milisegundos) como parámetro. Representa que el Futuro esperará un tiempo para completar la tarea después de que el resultado esté disponible en el Futuro. Por ejemplo:

 try { Object result = future.get(1000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { } catch (ExecutionException e) { } catch (TimeoutException e) { // thrown if timeout time interval passes // before a result is available. } 

Si Future no obtiene ningún resultado dentro del tiempo especificado, se Excepción de tiempo de espera es arrojado por el Futuro.

vicepresidente ejecutivo

Cancelar una tarea asincrónica

También podemos cancelar una tarea asincrónica en cualquier momento llamando al Cancelar() método de la interfaz Future. Por ejemplo:

 Future future = ... // Get Future from somewhere future.cancel(); 

Comprobar si se realizó una tarea asincrónica

La interfaz proporciona un método está hecho() para comprobar si la tarea asincrónica se completó o no. Por ejemplo:

 Future future = ... // Get Future from somewhere if(future.isDone()) { Object result = future.get(); } else { // do something else } 

Comprobar si se cancela una tarea asincrónica

La interfaz Future proporciona un método está cancelado() para comprobar si la tarea asincrónica representada por Future se cancela o no. Devuelve verdadero si la tarea se cancela correctamente; en caso contrario, devuelve falso. Por ejemplo:

 Future future = ... // get Future from somewhere if(future.isCancelled()) { } else { } 

Ejemplo del futuro de Java

FutureExample.java

 import java.util.concurrent.*; public class FutureExample { public static void main(String args[]) throws InterruptedException, ExecutionException { //ExecutorService allows us to execute tasks on threads asynchronously ExecutorService es = Executors.newSingleThreadExecutor(); //getting future //the method submit() submits a value-returning task for execution and returns the Future Future future = es.submit(() -> { //sleep thread for 2 seconds Thread.sleep(2000); return 'Welcome to Javatpoint'; }); //checks if the task is completed or not while(!future.isDone()) { System.out.println('The task is still in process.....'); //sleep thread for 2 milliseconds Thread.sleep(200); } System.out.println('Task completed! getting the result'); //getting the result after completing the task String result = future.get(); //prints the result System.out.println(result); es.shutdown(); } } 

Producción:

Ejemplo futuro de Java