6.1 Oggetti eseguibili
Quindi siamo arrivati alla maggior parte del pacchetto. Descriverà le interfacce per l'esecuzione di attività asincrone con la possibilità di ottenere risultati tramite le interfacce Future e Callable, nonché servizi e factory per la creazione di pool di thread: ThreadPoolExecutor, ScheduledPoolExecutor, ForkJoinPool.
Per una migliore comprensione, facciamo una piccola scomposizione di interfacce e classi.
![](https://cdn.codegym.cc/images/article/531332d5-b6f9-4da3-a528-e4ce9c7a8c91/1024.jpeg)
6.2 Realizzazioni di oggetti eseguibili
Future<V>
è un'interfaccia meravigliosa per ottenere i risultati di un'operazione asincrona. Il metodo chiave qui è il metodo get, che blocca il thread corrente (con o senza timeout) fino al completamento di un'operazione asincrona su un altro thread. Esistono anche metodi aggiuntivi per annullare l'operazione e controllare lo stato corrente. La classe FutureTask viene spesso utilizzata come implementazione.
RunnableFuture<V>
- se Future è un'interfaccia per l'API client, l'interfaccia RunnableFuture è già utilizzata per avviare la parte asincrona. Il corretto completamento del metodo run() termina l'operazione asincrona e consente il recupero dei risultati tramite il metodo get.
Callable<V>
- Un analogo esteso dell'interfaccia Runnable per operazioni asincrone. Consente di restituire un valore digitato e generare un'eccezione verificata. Anche se questa interfaccia non ha un metodo run(), molte classi java.util.concurrent lo supportano insieme a Runnable.
FutureTask<V>
— implementazione dell'interfaccia Future/RunnableFuture. Un'operazione asincrona viene considerata come input per uno dei costruttori sotto forma di oggetti Runnable o Callable. La stessa classe FutureTask è progettata per essere avviata in un thread di lavoro, ad esempio tramite new Thread(task).start() o tramite ThreadPoolExecutor. I risultati di un'operazione asincrona vengono recuperati tramite il metodo get(...).
Delayed
- utilizzato per attività asincrone che dovrebbero essere avviate in futuro, nonché in DelayQueue. Consente di impostare l'ora prima dell'inizio di un'operazione asincrona.
ScheduledFuture<V>
- un'interfaccia marker che combina le interfacce Future e Delayed.
RunnableScheduledFuture<V>
- un'interfaccia che combina RunnableFuture e ScheduledFuture. Inoltre, è possibile specificare se l'attività è un'attività singola o deve essere eseguita a una frequenza specificata.