Java Callable Future Example

een van de voordelen van het Java executor framework is dat we gelijktijdige taken kunnen uitvoeren die een enkel resultaat kunnen opleveren na het verwerken van de taken. De Java Concurrency API bereikt dit met de volgende twee interfaces Callable en Future.

Java Callable en Future interfaces

1.1. Callable

Callable interface heeft de call() methode. Bij deze methode moeten we de logica van een taak implementeren. De Callable interface is een geparametriseerde interface, wat betekent dat we het type gegevens moeten aangeven dat de call() methode zal teruggeven.

2.2. Future

Future interface heeft methoden om het resultaat gegenereerd door een Callable object te verkrijgen en de status ervan te beheren.

Java Callable Future voorbeeld

In dit voorbeeld maken we een FactorialCalculator die van het type Callableis. Het betekent dat we de call() methode zullen overschrijven en na berekening zullen we het resultaat van de call() methode retourneren. Dit resultaat kan later worden opgehaald uit Future referentie in het hoofdprogramma.

laten we nu de bovenstaande factoriële calculator testen met behulp van twee threads en 4 getallen.

Programmauitvoer.

hier sturen we een Callable object om in een uitvoerder uit te voeren met behulp van de submit() methode. Deze methode ontvangt een Callable object als parameter en geeft een Future object terug dat we met twee hoofddoelen kunnen gebruiken–

  1. we kunnen de status van de taak controleren – we kunnen de taak annuleren en controleren of deze is voltooid. Voor dit doel hebben we de isDone() methode gebruikt om te controleren of de taken waren voltooid.
  2. we kunnen het resultaat retourneren met de call () methode. Hiervoor hebben we de get() methode gebruikt. Deze methode wacht tot het Callable object de uitvoering van de call() methode heeft voltooid en het resultaat heeft teruggegeven.

    als de thread wordt onderbroken terwijl de methode get() op het resultaat wacht, wordt een uitzondering InterruptedException gegeven. Als de methode call() een uitzondering geeft, gooit deze methode een uitzondering ExecutionException.

de Future interface biedt een andere versie van de get() methode, d.w.z. get (longtimeout, TimeUnitunit). Deze versie van de get-methode, als het resultaat van de taak niet beschikbaar is, wacht erop voor de opgegeven tijd. Als de opgegeven tijdsperiode verstrijkt en het resultaat nog niet beschikbaar is, geeft de methode een waarde null terug.

Gelukkig Leren !!

Was dit bericht nuttig?

laat ons weten of u de post leuk vond. Dat is de enige manier waarop we kunnen verbeteren.
Ja
Nee