Java Callable Future Example

Uno dei vantaggi del framework Java executor è che possiamo eseguire attività simultanee che possono restituire un singolo risultato dopo l’elaborazione delle attività. L’API di concorrenza Java raggiunge questo con le seguenti due interfacce Callablee Future.

Java Callable e Future interfaces

1.1. Callable

Callable interfaccia ha il call() metodo. In questo metodo, dobbiamo implementare la logica di un compito. L’interfaccia Callable è un’interfaccia parametrizzata, il che significa che dobbiamo indicare il tipo di dati che il metodo call() restituirà.

2.2. L’interfaccia Future

Future ha metodi per ottenere il risultato generato da un oggetto Callable e per gestirne lo stato.

Java Callable Future Example

In questo esempio, stiamo creando un FactorialCalculator che è di tipo Callable. Significa che sovrascriveremo il metodo call() e dopo il calcolo, restituiremo il risultato dal metodo call(). Questo risultato in seguito può essere recuperato da Future riferimento detenuto dal programma principale.

Ora testiamo la calcolatrice fattoriale sopra usando due thread e 4 numeri.

Uscita del programma.

Qui abbiamo inviato un oggetto Callable da eseguire in un esecutore usando il metodo submit(). Questo metodo riceve un oggetto Callable come parametro e restituisce un oggetto Future che possiamo utilizzare con due obiettivi principali–

  1. Possiamo controllare lo stato dell’attività – possiamo annullare l’attività e verificare se è terminata. A tale scopo, abbiamo utilizzato il metodo isDone() per verificare se le attività erano terminate.
  2. Possiamo ottenere il risultato restituito dal metodo call (). A tale scopo, abbiamo utilizzato il metodo get(). Questo metodo attende fino a quando l’oggetto Callable ha terminato l’esecuzione del metodo call() e ha restituito il risultato.

    Se il thread viene interrotto mentre il metodo get() è in attesa del risultato, genera un’eccezione InterruptedException. Se il metodo call() genera un’eccezione, questo metodo genera un’eccezione ExecutionException.

L’interfaccia Future fornisce un’altra versione del metodo get(), ovvero get (longtimeout, TimeUnitunit). Questa versione del metodo get, se il risultato dell’attività non è disponibile, lo attende per il tempo specificato. Se il periodo di tempo specificato passa e il risultato non è ancora disponibile, il metodo restituisce un valore null.

Buon apprendimento !!

Questo post è stato utile?

Fateci sapere se ti è piaciuto il post. E ‘ l’unico modo per migliorare.
No