6.1 Objetos ejecutables

Entonces llegamos a la mayor parte del paquete. Describirá interfaces para ejecutar tareas asincrónicas con la capacidad de obtener resultados a través de las interfaces Future y Callable, así como servicios y fábricas para crear grupos de subprocesos: ThreadPoolExecutor, ScheduledPoolExecutor, ForkJoinPool.

Para una mejor comprensión, hagamos una pequeña descomposición de interfaces y clases.

6.2 Realizaciones de objetos ejecutables

Future<V>es una interfaz maravillosa para obtener los resultados de una operación asíncrona. El método clave aquí es el método get, que bloquea el subproceso actual (con o sin tiempo de espera) hasta que se complete una operación asíncrona en otro subproceso. También existen métodos adicionales para cancelar la operación y verificar el estado actual. La clase FutureTask se usa a menudo como implementación.

RunnableFuture<V>- si Future es una interfaz para la API del cliente, entonces la interfaz RunnableFuture ya se usa para iniciar la parte asíncrona. La finalización exitosa del método run() finaliza la operación asíncrona y permite recuperar los resultados a través del método get.

Callable<V>- Un análogo extendido de la interfaz Runnable para operaciones asíncronas. Le permite devolver un valor escrito y lanzar una excepción marcada. Aunque esta interfaz no tiene un método run(), muchas clases java.util.concurrent lo admiten junto con Runnable.

FutureTask<V>— implementación de la interfaz Future/RunnableFuture. Una operación asincrónica se toma como entrada para uno de los constructores en forma de objetos Runnable o Callable. La clase FutureTask en sí misma está diseñada para iniciarse en un subproceso de trabajo, por ejemplo, a través de new Thread(task).start() o a través de ThreadPoolExecutor. Los resultados de una operación asíncrona se recuperan mediante el método get(...).

Delayed- utilizado para tareas asincrónicas que deberían comenzar en el futuro, así como en DelayQueue. Le permite establecer el tiempo antes del inicio de una operación asíncrona.

ScheduledFuture<V>- una interfaz de marcador que combina las interfaces Future y Delayed.

RunnableScheduledFuture<V>- una interfaz que combina RunnableFuture y ScheduledFuture. Además, puede especificar si la tarea es una tarea única o debe ejecutarse con una frecuencia específica.