Java Callable Future eksempel
en af fordelene ved Java-eksekutorrammen er, at vi kan køre samtidige opgaver, der kan returnere et enkelt resultat efter behandling af opgaverne. Java Concurrency API opnår dette med følgende to grænseflader Callable
og Future
.
Java konverterbare og fremtidige grænseflader
1.1. Konverterbar
Callable
interface har call()
– metoden. I denne metode er vi nødt til at implementere logikken i en opgave. Callable
– grænsefladen er en parameteriseret grænseflade, hvilket betyder, at vi skal angive den type data, som call()
– metoden vender tilbage.
2.2. Future
Future
interface har metoder til at opnå resultatet genereret af et Callable
objekt og til at styre dets tilstand.
Java Callable Future eksempel
i dette eksempel opretter vi en FactorialCalculator
som er af typen Callable
. Det betyder, at vi tilsidesætter det call()
metode og efter beregning returnerer vi resultatet fra call()
metode. Dette resultat senere kan hentes fra Future
reference i hovedprogrammet.
lad os nu teste ovenstående faktorberegner ved hjælp af to tråde og 4 numre.
programudgang.
her sendte vi et Callable
objekt, der skal udføres i en eksekutor ved hjælp af submit()
– metoden. Denne metode modtager et Callable
objekt som en parameter og returnerer et Future
objekt, som vi kan bruge med to hovedmål–
- vi kan kontrollere status for opgaven-Vi kan annullere opgaven og kontrollere, om den er færdig. Til dette formål har vi brugt
isDone()
– metoden til at kontrollere, om opgaverne var færdige. - vi kan få resultatet returneret af call () – metoden. Til dette formål har vi brugt
get()
– metoden. Denne metode venter, indtilCallable
– objektet er færdig med udførelsen afcall()
– metoden og har returneret sit resultat.hvis tråden afbrydes, mens
get()
– metoden venter på resultatet, kaster den enInterruptedException
undtagelse. Hviscall()
– metoden kaster en undtagelse, kaster denne metode enExecutionException
undtagelse.
grænsefladen Future
giver en anden version af metoden get()
, dvs.get(longtimeout, TimeUnitunit). Denne version af get-metoden, hvis resultatet af opgaven ikke er tilgængelig, venter på den i den angivne tid. Hvis det angivne tidsrum går, og resultatet endnu ikke er tilgængeligt, returnerer metoden en null
værdi.
Glad Læring !!