6.1 Uitvoerbare objecten

Zo kwamen we bij het grootste deel van het pakket. Het beschrijft interfaces voor het uitvoeren van asynchrone taken met de mogelijkheid om resultaten te verkrijgen via de Future- en Callable-interfaces, evenals services en fabrieken voor het maken van threadpools: ThreadPoolExecutor, ScheduledPoolExecutor, ForkJoinPool.

Laten we, voor een beter begrip, een kleine ontleding van interfaces en klassen doen.

6.2 Realisaties van uitvoerbare objecten

Future<V>is een prachtige interface om de resultaten van een asynchrone bewerking te verkrijgen. De belangrijkste methode hier is de get-methode, die de huidige thread blokkeert (met of zonder time-out) totdat een asynchrone bewerking op een andere thread is voltooid. Er zijn ook aanvullende methoden om de bewerking te annuleren en de huidige status te controleren. De klasse FutureTask wordt vaak als implementatie gebruikt.

RunnableFuture<V>- als Future een interface is voor de Client API, dan wordt de RunnableFuture-interface al gebruikt om het asynchrone deel te starten. Succesvolle voltooiing van de methode run() beëindigt de asynchrone bewerking en maakt het mogelijk de resultaten op te halen via de get-methode.

Callable<V>- Een uitgebreide analoog van de Runnable-interface voor asynchrone bewerkingen. Hiermee kunt u een getypte waarde retourneren en een aangevinkte uitzondering genereren. Hoewel deze interface geen methode run() heeft, ondersteunen veel klassen java.util.concurrent deze methode samen met Runnable.

FutureTask<V>— implementatie van de Future/RunnableFuture-interface. Een asynchrone bewerking wordt als invoer voor een van de constructors genomen in de vorm van Runnable- of Callable-objecten. De klasse FutureTask zelf is ontworpen om te worden gestart in een werkthread, bijvoorbeeld via new Thread(task).start() of via ThreadPoolExecutor. De resultaten van een asynchrone bewerking worden opgehaald via de methode get(...).

Delayed- gebruikt voor asynchrone taken die in de toekomst zouden moeten starten, evenals in DelayQueue. Hiermee kunt u de tijd instellen vóór de start van een asynchrone bewerking.

ScheduledFuture<V>- een markeringsinterface die de Future- en Delayed-interfaces combineert.

RunnableScheduledFuture<V>- een interface die RunnableFuture en ScheduledFuture combineert. Bovendien kunt u opgeven of de taak een eenmalige taak is of met een bepaalde frequentie moet worden uitgevoerd.