Java Callable Future Example
yksi Java executor Frameworkin eduista on se, että voimme suorittaa samanaikaisia tehtäviä, jotka voivat palauttaa yhden tuloksen tehtävien käsittelyn jälkeen. Java Concurrency API saavuttaa tämän seuraavilla kahdella liitännällä Callable
ja Future
.
Java Callable and Future interfaces
1.1. Kutsuttava
Callable
liittymässä on call()
– menetelmä. Tässä menetelmässä meidän on toteutettava tehtävän logiikka. Callable
– rajapinta on parametrisoitu rajapinta, eli on ilmoitettava, minkä tyyppistä dataa call()
– menetelmä palaa.
2.2. Future
Future
interfacessa on menetelmiä Callable
olion tuottaman tuloksen saamiseksi ja sen tilan hallitsemiseksi.
Java Callable Future Example
tässä esimerkissä luodaan FactorialCalculator
, joka on tyyppiä Callable
. Se tarkoittaa, että ohitamme sen call()
– menetelmän ja laskennan jälkeen palautamme tuloksen call()
– menetelmästä. Tämän tuloksen voi myöhemmin hakea pääohjelman hallussa olevasta Future
referencestä.
kokeillaan nyt yllä olevaa faktorialaskinta kahden kierteen ja 4 numeron avulla.
ohjelman tuotos.
tässä lähetimme Callable
objektin toteutettavaksi toimeenpanijassa submit()
– menetelmällä. Tämä menetelmä vastaanottaa parametrina Callable
objektin ja palauttaa Future
objektin, jota voimme käyttää kahdella päätavoitteella–
- voimme hallita tehtävän tilaa-voimme peruuttaa tehtävän ja tarkistaa, onko se päättynyt. Tätä varten olemme käyttäneet
isDone()
– menetelmää tarkistaaksemme, olivatko tehtävät päättyneet. - saamme tuloksen palautettua soittomenetelmällä (). Tähän tarkoitukseen on käytetty
get()
– menetelmää. Tämä menetelmä odottaa, kunnesCallable
Olio on suorittanutcall()
– menetelmän loppuun ja palauttanut tuloksensa.jos säie keskeytyy
get()
– menetelmän odottaessa tulosta, se heittääInterruptedException
poikkeuksen. Joscall()
menetelmä heittää poikkeuksen, tämä menetelmä heittääExecutionException
poikkeuksen.
Future
– rajapinta tarjoaa toisen version get()
– menetelmästä eli get-menetelmästä(longtimeout,TimeUnitunit). Tämä get-menetelmän versio, jos tehtävän tulos ei ole käytettävissä, odottaa sitä määritetyn ajan. Jos määritetty aika kuluu eikä tulosta ole vielä saatavilla, menetelmä palauttaa arvon null
.
Onnellista Oppimista !!