6.1 Eksekverbare objekter
Så vi nåede til den største del af pakken. Den vil beskrive grænseflader til at køre asynkrone opgaver med mulighed for at opnå resultater gennem Future og Callable grænseflader, samt tjenester og fabrikker til oprettelse af trådpuljer: ThreadPoolExecutor, ScheduledPoolExecutor, ForkJoinPool.
For en bedre forståelse, lad os lave en lille nedbrydning af grænseflader og klasser.
6.2 Realiseringer af eksekverbare objekter
Future<V>
er en vidunderlig grænseflade til at få resultaterne af en asynkron operation. Nøglemetoden her er get-metoden, som blokerer den aktuelle tråd (med eller uden timeout), indtil en asynkron operation på en anden tråd er afsluttet. Der er også yderligere metoder til at annullere operationen og kontrollere den aktuelle status. FutureTask-klassen bruges ofte som implementering.
RunnableFuture<V>
- hvis Future er en grænseflade til klient-API'en, så er RunnableFuture-grænsefladen allerede brugt til at starte den asynkrone del. En vellykket gennemførelse af run()-metoden afslutter den asynkrone operation og gør det muligt at hente resultaterne via get-metoden.
Callable<V>
- En udvidet analog af Runnable-grænsefladen til asynkrone operationer. Giver dig mulighed for at returnere en indtastet værdi og kaste en markeret undtagelse. Selvom denne grænseflade ikke har en run()-metode, understøtter mange java.util.concurrent-klasser den sammen med Runnable.
FutureTask<V>
— implementering af Future/RunnableFuture-grænsefladen. En asynkron operation tages som input til en af konstruktørerne i form af Runnable eller Callable objekter. Selve FutureTask-klassen er designet til at blive lanceret i en arbejdstråd, for eksempel via ny Thread(task).start() eller via ThreadPoolExecutor. Resultaterne af en asynkron operation hentes via get(...) metoden.
Delayed
- bruges til asynkrone opgaver, der skulle starte i fremtiden, samt i DelayQueue. Giver dig mulighed for at indstille tiden før starten af en asynkron operation.
ScheduledFuture<V>
- en markørgrænseflade, der kombinerer de fremtidige og forsinkede grænseflader.
RunnableScheduledFuture<V>
- en grænseflade, der kombinerer RunnableFuture og ScheduledFuture. Derudover kan du angive, om opgaven er en engangsopgave eller skal køres med en bestemt frekvens.
GO TO FULL VERSION