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 Callable
is. 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–
- 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. - we kunnen het resultaat retourneren met de call () methode. Hiervoor hebben we de
get()
methode gebruikt. Deze methode wacht tot hetCallable
object de uitvoering van decall()
methode heeft voltooid en het resultaat heeft teruggegeven.als de thread wordt onderbroken terwijl de methode
get()
op het resultaat wacht, wordt een uitzonderingInterruptedException
gegeven. Als de methodecall()
een uitzondering geeft, gooit deze methode een uitzonderingExecutionException
.
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 !!