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.

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.