Kā ieviest izsaucamo saskarni Java



Šis raksts sniegs jums detalizētas un visaptverošas zināšanas par to, kā Java ieviest izsaucamo saskarni ar piemēriem.

Java daudzsavienojumu programmas liecina par plašu lietošanu Zvana un nākotne. Saskaņā ar priekšzināšanām par pavedieniem un vairāku pavedienu izveidošanu lasītāji varēs labāk izprast šī raksta diskusiju. Tā kā šajā rakstā es paskaidrošu Java izsaucamo saskarni.

Atkārtojiet pavedienus

Tomēr ļaujiet man īsi ievadīt pavedienu jēdzienu. Vītne ir atsevišķs izpildes ceļš, ja jums jāveic atkārtots uzdevums, darbu var sadalīt vairākos uzdevumos un piešķirt tos pavedieniem. Vairāku vītņu vītneir nekas cits kā vairāku pavedienu piešķiršana dažādu uzdevumu paralēlai izpildei, lai ātri iegūtu rezultātu.





Kas ir izsaucamā saskarne Java

Java 5 tika ieviesta klase “java.util.concurrent”. Šis izsaucamais interfeiss tika ieviests, izmantojot vienlaicības paketi, kas izskatījās līdzīga Runnable interfeisam. Tas arī var atgriezt jebkuru objektu un spēj iemest Izņēmumu. Java Callable interfeiss izmanto Generics, tādējādi ļaujot atgriezt jebkura veida objektus. Izpildītāja ietvars dod metodi Iesūtīšana (), lai izpildītu izsaucamās ieviešanas pavedienu pūlā. Patiesībā Java Executor Framework ievēro WorkerThread modeļus.

java-interfaceVītņu krājumā lietotāji var sākt pavedienus, izmantojot metodi Executors.newFixedThreadPool (10), un attiecīgi iesniegt tai uzdevumu. Runnable darbojas kā pavediena mērķis, un uzdevuma definēšanai obligāti tiek ieviesta public void run () metode. Tas tiks izpildīts ar pavedieniem pavedienu pūlā. Pamatojoties uz pavedienu pieejamību pūlā, Executor Framework pavedieniem piešķir darbu (izpildāmo mērķi).Ja tiek izmantoti visi pavedieni, uzdevums ir jāaptur. Kad pavediens ir pabeidzis vienu uzdevumu, tas atgriežas pūlā kā pieejamais pavediens, kas ir gatavs pieņemt turpmākos uzdevumus. Callable ir līdzīgs Runnable un var atgriezt jebkura veida objektus, kad mēs vēlamies iegūt rezultātu vai statusu no uzdevuma.



Izsaucamās saskarnes atgriešana

Java Callable atgriež java.util.concurrent. Java Future piedāvā atcelt () metodi, lai novērstu saistīto izsaucamo uzdevumu. Šī ir pārslogota get () metodes versija, kur var norādīt noteiktu laiku, kamēr jāgaida rezultāts. Ir lietderīgi izvairīties no pašreizējā pavediena, kas var būt bloķēts uz ilgāku laiku. Lūdzu, atcerieties, ka get metode ir sinhrona metode, un, kamēr izsaucamais pabeidz savu uzdevumu un neatgriež vērtību, viņam būs jāgaida izsaucamais.

Ir arī metodes “isDone ()” un “isCancelled ()”, lai iegūtu saistītā izsaucamā uzdevuma pašreizējo statusu. Apsveriet piemēru, kur jāatrod visu skaitļu summa no viena līdz 100. Mēs varam secīgi cilpot no 1 līdz 100 un beidzot tos pievienot. Vēl viena iespēja ir sadalīšana un iekarošana. Ar šo metodi skaitļus varam sagrupēt tā, lai katrai grupai būtu tieši divi elementi. Visbeidzot, mēs varam piešķirt šo grupu pavedienu kopai. Tāpēc katrs pavediens paralēli atgriež daļēju summu un pēc tam apkopo šīs daļējās summas un saskaita tās, lai iegūtu visu summu.



Zvanāmās un nākotnes klases iezīmes

  • Zvana klase ir SAM tipa interfeiss, un tāpēc to var ieviest lambda izteiksmē.

  • Izsaucamajai klasei ir tikai viena metode “call ()”, kas satur visu kodu, kas nepieciešams asinhronai izpildei.

  • Skrienamās saskarnes vidē nebija iespējas atgriezt aprēķina vai metienu pārbaudītā izņēmuma rezultātu. Tā kā ar Callable ir jāatgriež vērtība un jāizdod pārbaudīts izņēmums.

  • Klases Future metodi Get () var izmantot, lai izgūtu rezultātus, kad aprēķins ir pabeigts. Lietotāji var arī pārbaudīt, vai aprēķins ir pabeigts, izmantojot metodi done ().

  • Aprēķina atcelšana, izmantojot metodi future.cancel (), dažās lietojumprogrammās ir arī ieguvums.

  • Get () sauc par bloķējošu zvanu, un tas turpina bloķēt, līdz aprēķins ir pabeigts.

    izveidot objektu masīvu

Zvanāmo un skrienamo klašu salīdzinājums

Zvanāms Skrienams
Tā ir daļa no java.util.concurrent ' pakotne kopš Java 1.5Kopš Java 1.0 tā ir daļa no java.lang pakotnes
Parametrēts interfeiss, piemēram, CallableNeparametrēts interfeiss
Spēj iemest pārbaudītu izņēmumuTas nevar mest pārbaudītu izņēmumu
Tajā ir viena metode call (), kas atgriež V tipu. Tas ir tāds pats kā definētais interfeisa parametrs “Type”Šeit tas satur vienu metodi, sauktu run (), kas atgriež spēkā neesošu

Zemāk ir vienkāršs piemērs Java izsaucamajai klasei, kurā kods atgriež konkrētā pavediena nosaukumu, kurš izpilda uzdevumu pēc vienas sekundes. Šeit mēs izmantojam ekstraktora ietvaru, lai 100 uzdevumus izpildītu paralēli Java Future iesniegto uzdevumu rezultātam. Pirmais fragments ir izvade, un zemāk ir kods.

pakete com.journaldev.threads importēt java.util.ArrayList importēt java.util.Date importēt java.util.List importēt java.util.concurrent.Callable import java.util.concurrent.ExecutionException import java.util.concurrent.ExecutorService importēt java .util.concurrent. Izpildītāji importē java.util.concurrent. Nākotnes publiskā klase MyCallable īsteno Callable {@Override public String call () throws Exception {Thread.sleep (1000) // return the thread name izpildot šo izsaucamo uzdevumu, atgrieziet Thread.currentThread () .getName ()} public static void main (String args []) {// Saņemt ExecutorService no Executors lietderības klases, pavedienu kopas lielums ir 10 ExecutorService izpildītājs = Executors.newFixedThreadPool (10) // izveido sarakstu, kurā turēt Nākotni objekts, kas saistīts ar izsaucamo sarakstusaraksts = jauns ArrayList() // Izveidojiet MyCallable instanci Callable callable = new MyCallable () vietnei (int i = 0 i<100 i++){ //submit Callable tasks to be executed by thread pool Future future = executor.submit(callable) //add Future to the list, we can get return value using Future list.add(future) } for(Future fut : list){ try { //print the return value of Future, notice the output delay in console // because Future.get() waits for task to get completed System.out.println(new Date()+ '::'+fut.get()) } catch (InterruptedException | ExecutionException e) { e.printStackTrace() } } //shut down the executor service now executor.shutdown() } } 

Executor Services slēgšana

Izšķirošais un svarīgais aspekts, kas daudziem izstrādātājiem pietrūkst, ir ExecutorService slēgšana. ExecutorService ir vitāli svarīgs un tiek izveidots ar papildu pavedienu elementiem. Paturiet prātā, ka JVM apstājas tikai tad, kad tiek apturēti visi pavedieni, kas nav daemon. Tādējādi izpildītāja pakalpojuma vienkārša izslēgšana neļauj JVM apstāties.

Lai izpildītāja dienestam teiktu, ka pavedieni nav jāpalaiž, mums pakalpojums ir jāslēdz.

Izslēgšanu var izmantot trīs veidos:

  • anulēta izslēgšana () - Tas uzsāk kārtīgu izslēgšanu, kurā tiek izpildīti iepriekš iesniegtie uzdevumi, bet netiek pieņemti jauni uzdevumi.
  • Saraksta izslēgšanaTagad () - Tas mēģina apturēt visus aktīvi izpildītos uzdevumus, aptur gaidošo uzdevumu apstrādi un atgriež arī to uzdevumu sarakstu, kuri gaidīja izpildi.
  • void awaitTermination () - Tas turpina bloķēt, līdz visi uzdevumi ir pabeigti pēc izslēgšanas pieprasījuma vai iestājas taimauts. Tas bloķē arī pašreizējā pavediena pārtraukumu. Viss ir atkarīgs no tā, kurš uzdevums ir pirmais.

Ar to mēs esam nonākuši līdz Java raksta izsaucamās saskarnes beigām. Es ceru, ka jūs sapratāt par Java nākotnes un izsaucamo saskarni.

Pārbaudiet Autors: Edureka, uzticams tiešsaistes mācību uzņēmums ar vairāk nekā 250 000 apmierinātu izglītojamo tīklu visā pasaulē. Edureka Java J2EE un SOA apmācības un sertifikācijas kurss ir paredzēts studentiem un profesionāļiem, kuri vēlas būt Java izstrādātāji.

Vai mums ir jautājums? Lūdzu, pieminējiet to šī emuāra “Zvanāmā saskarne Java” komentāru sadaļā, un mēs pēc iespējas ātrāk sazināsimies ar jums.