6.1 Kjørbare objekter
Så vi kom til den største delen av pakken. Den vil beskrive grensesnitt for å kjøre asynkrone oppgaver med muligheten til å oppnå resultater gjennom Future og Callable-grensesnittene, samt tjenester og fabrikker for å lage trådpooler: ThreadPoolExecutor, ScheduledPoolExecutor, ForkJoinPool.
For en bedre forståelse, la oss gjøre en liten dekomponering av grensesnitt og klasser.

6.2 Realiseringer av kjørbare objekter
Future<V>
er et fantastisk grensesnitt for å få resultatene av en asynkron operasjon. Nøkkelmetoden her er get-metoden, som blokkerer gjeldende tråd (med eller uten tidsavbrudd) til en asynkron operasjon på en annen tråd er fullført. Det finnes også flere metoder for å avbryte operasjonen og sjekke gjeldende status. FutureTask-klassen brukes ofte som en implementering.
RunnableFuture<V>
- hvis Future er et grensesnitt for Client API, er RunnableFuture-grensesnittet allerede brukt til å starte den asynkrone delen. Vellykket fullføring av run()-metoden avslutter den asynkrone operasjonen og lar resultatene hentes via get-metoden.
Callable<V>
- En utvidet analog av Runnable-grensesnittet for asynkrone operasjoner. Lar deg returnere en skrevet verdi og kaste et avmerket unntak. Selv om dette grensesnittet ikke har en run()-metode, støtter mange java.util.concurrent-klasser det sammen med Runnable.
FutureTask<V>
— implementering av Future/RunnableFuture-grensesnittet. En asynkron operasjon tas som input til en av konstruktørene i form av Runnable eller Callable objekter. Selve FutureTask-klassen er designet for å bli lansert i en arbeidstråd, for eksempel via ny Thread(task).start() eller via ThreadPoolExecutor. Resultatene av en asynkron operasjon hentes via get(...)-metoden.
Delayed
- brukes til asynkrone oppgaver som skal starte i fremtiden, samt i DelayQueue. Lar deg stille inn tiden før starten av en asynkron operasjon.
ScheduledFuture<V>
- et markørgrensesnitt som kombinerer Future og Delayed-grensesnittene.
RunnableScheduledFuture<V>
- et grensesnitt som kombinerer RunnableFuture og ScheduledFuture. I tillegg kan du spesifisere om oppgaven er en engangsoppgave eller skal kjøres med en spesifisert frekvens.
GO TO FULL VERSION