Red de conocimiento informático - Material del sitio web - Cómo obtener el resultado después de ejecutar un hilo de forma asíncrona en Java

Cómo obtener el resultado después de ejecutar un hilo de forma asíncrona en Java

Java proporciona la interfaz Future y la clase FutureTask que implementa la interfaz Future, que se utiliza para devolver el resultado de la ejecución del subproceso (a través del método get()).

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

public Integer call() lanza una excepción {

int suma = 0;

for (int i = 0; i < 10; i++) {

suma += i;

}

devuelve suma;

}

});

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