1. Concepto
El futuro representa el resultado de una tarea asincrónica que puede no haberse completado. Se puede agregar una devolución de llamada a este resultado para realizar las operaciones correspondientes después de que la ejecución de la tarea tenga éxito o falle.
2. Interfaz futura
La interfaz Future define cinco métodos de interfaz principales: RunnableFuture y ScheduleFuture heredan esta interfaz, y CompleteFuture y ForkJoinTask heredan esta interfaz.
3. Ejemplos
prueba de paquete; importar java.util.concurrent.Callable; importar java.util.concurrent.ExecutionException; importar java.util.concurrent.FutureTask; clase pública CallableFutureTest { público estático vacío principal (String [] argumentos) { tiempo de inicio largo = System.currentTimeMillis(); Invocable<Integer> calcularCallable = new Invocable<Integer>() { @Anular llamada entera pública () lanza una excepción { // TODO Código auxiliar de método generado automáticamente Thread.sleep(2000); // La simulación consume mucho tiempo int resultado = 1+2; resultado de devolución; } }; FutureTask<Integer> calcularFutureTask = new FutureTask<>(calculateCallable); Hilo t1 = nuevo hilo (calcularFutureTask); t1.inicio(); // Ahora únete a Thread para ejecutar un servicio que requiere mucho tiempo y simula llamadas remotas y se basa en los resultados de sus cálculos (como una calculadora de red) intentar { // Simula tareas que requieren mucho tiempo, el hilo principal hace lo suyo, lo que refleja las ventajas del subproceso múltiple Thread.sleep(3000); int a = 3+5; Resultado entero = calcularFutureTask.get(); System.out.println("result = "+(a+result));// Simula el resultado de ejecución del hilo principal confiando en el subproceso long endTime = System.currentTimeMillis(); System.out.println("time = "+(endTime-startTime)+"ms"); } captura (Excepción interrumpida | Excepción de ejecución e) { // TODO Bloque de captura generado automáticamente e.printStackTrace(); } } }
Como puede ver en lo anterior, el tiempo empleado anteriormente es de aproximadamente 3 segundos. De hecho, es principalmente el tiempo que pasa el hilo principal en suspensión (3000). El tiempo que podemos necesitar puede ser 5 segundos (subproceso 2 + hilo principal 3).
Lo anterior es cómo Future obtiene los resultados de los subprocesos en Java. Se puede decir que Future es más flexible en el procesamiento de subprocesos. El mecanismo es aproximadamente que cuando se ejecuta un subproceso, se ejecuta otro subproceso al mismo tiempo. Si estás interesado, puedes aprender más después de clase.