6.1 Körbara objekt

Så vi kom till den största delen av paketet. Den kommer att beskriva gränssnitt för att köra asynkrona uppgifter med möjlighet att erhålla resultat genom Future och Callable-gränssnitten, samt tjänster och fabriker för att skapa trådpooler: ThreadPoolExecutor, ScheduledPoolExecutor, ForkJoinPool.

För en bättre förståelse, låt oss göra en liten nedbrytning av gränssnitt och klasser.

6.2 Realiseringar av körbara objekt

Future<V>är ett underbart gränssnitt för att få resultaten av en asynkron operation. Nyckelmetoden här är get-metoden, som blockerar den aktuella tråden (med eller utan timeout) tills en asynkron operation på en annan tråd har slutförts. Det finns också ytterligare metoder för att avbryta operationen och kontrollera aktuell status. FutureTask-klassen används ofta som en implementering.

RunnableFuture<V>- om Future är ett gränssnitt för klient-API:et används redan RunnableFuture-gränssnittet för att starta den asynkrona delen. Ett framgångsrikt slutförande av run()-metoden avslutar den asynkrona operationen och gör att resultaten kan hämtas via get-metoden.

Callable<V>- En utökad analog av Runnable-gränssnittet för asynkrona operationer. Låter dig returnera ett inskrivet värde och skicka ett markerat undantag. Även om detta gränssnitt inte har en run()-metod, stöder många java.util.concurrent-klasser det tillsammans med Runnable.

FutureTask<V>— Implementering av gränssnittet Future/RunnableFuture. En asynkron operation tas som indata till en av konstruktörerna i form av körbara eller anropbara objekt. Själva klassen FutureTask är designad för att lanseras i en arbetstråd, till exempel via ny Thread(task).start() eller via ThreadPoolExecutor. Resultaten av en asynkron operation hämtas via get(...)-metoden.

Delayed- används för asynkrona uppgifter som bör starta i framtiden, samt i DelayQueue. Låter dig ställa in tiden före start av en asynkron operation.

ScheduledFuture<V>- ett markörgränssnitt som kombinerar gränssnitten Future och Delayed.

RunnableScheduledFuture<V>- ett gränssnitt som kombinerar RunnableFuture och ScheduledFuture. Dessutom kan du ange om uppgiften är en engångsuppgift eller ska köras med en viss frekvens.