Java Callable Future Example
en av fordelene Med Java byrder framework er at vi kan kjøre samtidige oppgaver som kan returnere et enkelt resultat etter behandling av oppgavene. Java Samtidighet API oppnår dette med følgende to grensesnitt Callable
og Future
.
Java Kallbare og Fremtidige grensesnitt
1.1. Callable
Callable
grensesnittet har metoden call()
. I denne metoden må vi implementere logikken til en oppgave. Callable
– grensesnittet er et parameterisert grensesnitt, noe som betyr at vi må angi hvilken type data call()
– metoden kommer tilbake.
2.2. Future
Future
grensesnittet har metoder for å oppnå resultatet generert av et Callable
objekt og å administrere tilstanden.
Java Callable Future Example
i dette eksemplet lager vi en FactorialCalculator
som er av typen Callable
. Det betyr at vi vil overstyre det er call()
metode og etter beregning, vil vi returnere resultatet fra call()
metode. Dette resultatet senere kan hentes fra Future
referanse holdt av hovedprogrammet.
la Oss nå teste den ovennevnte faktorielle kalkulatoren ved hjelp av to tråder og 4 tall.
programutgang.
her sendte vi et Callable
– objekt som skulle utføres i en eksekutor ved hjelp av submit()
– metoden. Denne metoden mottar et Callable
objekt som en parameter og returnerer et Future
objekt som vi kan bruke med to hovedmål–
- vi kan kontrollere statusen til oppgaven – vi kan avbryte oppgaven og sjekke om den er ferdig. For dette formålet har vi brukt
isDone()
– metoden for å sjekke om oppgavene var ferdige. - vi kan få resultatet returnert av call () – metoden. For dette formålet har vi brukt
get()
– metoden. Denne metoden venter tilCallable
– objektet er ferdig med utførelsen avcall()
– metoden og har returnert resultatet.hvis tråden avbrytes mens metoden
get()
venter på resultatet, kaster den et unntakInterruptedException
. Hvis metodencall()
kaster et unntak, kaster denne metoden et unntakExecutionException
.
grensesnittet Future
gir en annen versjon av metoden get()
, dvs. get(longtimeout, TimeUnitunit). Denne versjonen av get-metoden, hvis resultatet av oppgaven ikke er tilgjengelig, venter på det for den angitte tiden. Hvis den angitte tidsperioden går og resultatet ikke er tilgjengelig ennå, returnerer metoden en null
– verdi.
Glad Læring !!