Cómo obtener el resultado después de ejecutar un hilo de forma asíncrona en Java
1.Interfaz Future
La interfaz Runnable no devuelve ningún valor al ejecutar una tarea. El resultado de la ejecución del método run() de Runnable es nulo, mientras que el resultado de la ejecución del método run() de Runnable es nulo. El método de llamada de la interfaz Future es Devolver resultados es una de las diferencias entre Runnable y Future. Otra diferencia entre ellos es que la tarea de interfaz Runnable se ejecuta llamando al método de ejecución ExecutorService (tarea ejecutable), mientras que la tarea de interfaz Future se ejecuta llamando al método de envío ExecutorService (tarea futura). Llamar al método get() de Future puede obtener directamente el valor de retorno de la tarea. Se bloqueará hasta que el resultado de la tarea esté disponible. Podemos llamar al método isDone() de Future para determinar si el resultado de la tarea está listo. Ejecutores;
importar java.util.concurrent.newCachedThreadPool();
Resultado futuro1 = executor.submit(new Callable() {
@Override p>
public Integer call() lanza una excepción {
int suma = 0;
for (int i = 0; i < 10; i++) {
suma += i;
}
devuelve suma;
}
}); p>
Resultado futuro2 = ejecutor. enviar(new Callable() {
@Override
llamada entera pública() lanza una excepción {
int sum = 0;
for (int i = 10; i < 100; i++) {
suma += i;
}
devolver suma;
}
}}
});
executor.shutdown();
System.out.println(result1.get () + result2.get());
}
}
}
2. Clase FutureTask
FutureTask implementa la interfaz Future y al pasarle la instancia invocable como parámetro se creará una instancia de FutureTask y luego se utilizará el método de envío de ExecutorService para ejecutar la instancia. Finalmente, use el método get nuevamente para obtener los resultados de ejecución del hilo.
FutureTask;
clase pública TestFutureTask {
public static void main(String[] args) lanza InterruptedException, ExecutionException {
ExecutorService ejecutor = Executors.submit(ft
System.out.println(ft.get());
ejecutor.shutdown()
}
; }vacío