Kaip įdiegti skambinamąją sąsają „Java“



Šis straipsnis suteiks jums išsamių ir išsamių žinių apie tai, kaip įdiegti „Java“ skambinamąją sąsają su pavyzdžiais.

„Java“ kelių gijų programos liudija, kad naudojama daugybė programų Skambinama ir ateitis. Turėdami būtinų žinių apie gijas ir daugialypius siūlus, skaitytojai galės geriau suprasti šio straipsnio diskusijas. Kadangi šiame straipsnyje paaiškinsiu „Java“ skambinamąją sąsają.

Susipažinkite su gijomis

Tačiau leiskite man trumpai pristatyti siūlų sampratą. Gija yra atskiras vykdymo kelias, jei jums reikia atlikti pasikartojančią užduotį, darbą galima suskaidyti į kelias užduotis ir priskirti juos gijoms. Daugiasriegis sriegimasyra ne kas kitas, o kelių gijų priskyrimas lygiagrečiai vykdyti skirtingas užduotis, kad greitai gautumėte rezultatą.





Kas yra „Java“ skambinama sąsaja

„Java 5“ buvo pristatyta „java.util.concurrent“ klasė. Ši skambinama sąsaja buvo įdiegta per lygiagretumo paketą, kuris atrodė panašus į „Runnable“ sąsają. Jis taip pat gali grąžinti bet kokį daiktą ir gali išmesti išimtį. „Java Callable“ sąsajoje naudojamos „Generics“, todėl galima grąžinti bet kokio tipo objektą. „Executor Framework“ suteikia metodą „pateikti“ („Callable“), skirtą vykdyti „Callable“ diegimą gijų grupėje. Iš tikrųjų „Java Executor Framework“ laikosi „WorkerThread“ modelių.

java-interfaceGijų grupėje vartotojai gali inicijuoti gijas naudodami Executors.newFixedThreadPool (10) metodą ir atitinkamai pateikti jam užduotį. Vykdomas veikia kaip gijos taikinys, o užduočiai apibrėžti privalomai įgyvendinamas „public void run ()“ metodas. Tai bus vykdoma gijų grupėje esančiomis gijomis. Atsižvelgiant į tai, kad grupėje yra siūlų, „Executor Framework“ priskiria darbą (vykdomą tikslą) gijoms.Jei naudojamos visos gijos, užduotis turi būti sustabdyta. Kai gija atliks vieną užduotį, ji grįš į telkinį kaip galimą giją, kuri yra pasirengusi priimti būsimas užduotis. „Callable“ yra panašus į „Runnable“ ir gali grąžinti bet kokio tipo objektą, kai norime gauti užduoties rezultatą ar būseną.



Skambinamos sąsajos grąžinimas

„Java Callable“ grąžina java.util.concurrent. „Java Future“ siūlo atšaukimo () metodą, kad pašalintų susietą užduotį, kurią galima skambinti. Tai yra perkrauta get () metodo versija, kur galima nurodyti tam tikrą laiką, kol laukiama rezultato. Naudinga vengti dabartinės gijos, kuri gali būti užblokuota ilgesniam laikui. Atminkite, kad „get“ metodas yra sinchroninis metodas ir kol iškviečiamasis baigs savo užduotį ir grąžins vertę, jis turės laukti, kol bus iškviečiamas.

c ++ masyvo rūšiavimas

Taip pat yra metodų „isDone ()“ ir „isCancelled ()“, kad būtų galima sužinoti dabartinę susietos iškvietos užduoties būseną. Apsvarstykite pavyzdį, kai reikia rasti visų skaičių nuo vieno iki 100 sumą. Mes galime kilpinti nuo 1 iki 100 nuosekliai ir galiausiai juos pridėti. Kita galimybė yra dalijantis ir užkariaujant. Taikydami šį metodą, galime grupuoti skaičius taip, kad kiekviena grupė turėtų lygiai du elementus. Galiausiai tą grupę galime priskirti siūlų grupei. Todėl kiekviena gija lygiagrečiai grąžina dalinę sumą, tada surenka tas dalines sumas ir jas prideda, kad gautų visą sumą.



Skambinamos ir būsimos klasės ypatybės

  • „Callable class“ yra SAM tipo sąsaja, todėl ją galima įdiegti „lambda“ išraiškoje.

  • Skambinama klasė turi tik vieną metodą „call ()“, kuriame yra visas kodas, reikalingas asinchroniškai vykdyti.

  • Vykdomoje sąsajos aplinkoje nebuvo galimybės grąžinti skaičiavimo ar metimo patikrintos išimties rezultato. Kai „Callable“ grąžina vertę ir išmeta pažymėtą išimtį.

  • „Future“ klasės „Get“ (metodas) gali būti naudojamas norint gauti rezultatus, kai bus atliktas skaičiavimas. Naudodami atliktą () metodą, vartotojai taip pat gali patikrinti, ar skaičiavimas baigtas, ar ne.

    java turi-santykius
  • Skaičiavimo atšaukimas naudojant „future.cancel ()“ metodą taip pat yra naudingas kai kuriose programose.

  • „Get“) vadinamas blokavimo skambučiu ir jis toliau blokuoja, kol skaičiavimas bus baigtas.

Skambinamų ir bėgamų klasių palyginimas

Skambinama Bėgama
Tai dalis java.util.concurrent ' paketą nuo „Java 1.5“Tai yra paketo java.lang dalis nuo „Java 1.0“
Parametruota sąsaja, tokia kaip „Callable“Neaparamizuota sąsaja
Geba išmesti pažymėtą išimtįTai negali būti patikrinta išimtis
Jame yra vienas metodas, call (), kuris grąžina V tipą, tai yra tas pats, kas apibrėžtas sąsajos parametras „Type“Čia yra vienas metodas, vadinamas run (), kuris grąžina negaliojančią

Žemiau pateikiamas paprastas įdiegtos „Java“ klasės pavyzdys, kai kodas grąžina konkrečios gijos pavadinimą, kuris vykdo užduotį po vienos sekundės. Čia mes naudojame ištraukimo sistemą, kad atliktume 100 užduočių lygiagrečiai su „Java Future“ ir pateiktų užduočių rezultatu. Pirmasis fragmentas yra išvestis, o žemiau pateiktas kodas.

paketas com.journaldev.threads importuoti java.util.ArrayList importuoti java.util.Date importuoti java.util.List importuoti java.util.concurrent.Callable importuoti java.util.concurrent.ExecutionException importuoti java.util.concurrent.ExecutorService importuoti java .util.concurrent. Vykdytojai importuoja java.util.concurrent. Ateities viešosios klasės „MyCallable“ įgyvendina iškviečiamąjį {@Override public String call () meta išimtį {Thread.sleep (1000) // grąžina gijos pavadinimą, vykdantį šią iškviečiamą užduotį, grąžina Thread.currentThread () .getName ()} public static void main (String args []) {// Gauti „ExecutorService“ iš „Executors“ naudingumo klasės, gijų telkinio dydis yra 10 „ExecutorService“ vykdytojas = „Executors.newFixedThreadPool“ (10) // sukurkite sąrašą, kuriame bus ateitis objektas, susietas su skambinamųjų sąrašusąrašas = naujas „ArrayList“() // Sukurkite „MyCallable“ pavyzdį „Callable callable = new MyCallable ()“ (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() } } 

Vykdytojo paslaugų uždarymas

Esminis ir svarbus aspektas, kurio praleidžia daugelis kūrėjų, yra „ExecutorService“ uždarymas. „ExecutorService“ yra gyvybiškai svarbi ir sukurta su papildomais gijų elementais. Atminkite, kad JVM sustabdomas tik tada, kai sustabdomos visos ne „daemon“ gijos. Taigi paprasčiausias programos vykdytojo uždarymas neleidžia JVM sustoti.

Norėdami pasakyti vykdytojo tarnybai, kad nereikia vykdyti gijų, turėtume uždaryti paslaugą.

„Java“ programėlių pavyzdžiai su išvestimi

Yra trys būdai, kaip pasinaudoti išjungimu:

  • negaliojantis išjungimas () - Tai inicijuoja tvarkingą išjungimą, kuriame vykdomos anksčiau pateiktos užduotys, tačiau nepriimamos naujos užduotys.
  • Sąrašo išjungimas dabar () - Tai bando sustabdyti visas aktyviai vykdomas užduotis, sustabdo laukiančių užduočių apdorojimą ir grąžina užduočių, kurių laukė vykdymas, sąrašą.
  • negaliojantis laukti Nutraukimas () - Tai toliau blokuojama tol, kol visos užduotys bus baigtos vykdyti po uždarymo užklausos arba atsiras skirtasis laikas. Jis taip pat blokuoja, kai nutrūksta dabartinė gija. Viskas priklauso nuo to, kuri užduotis yra pirmoji.

Tai pasiekėme „Java“ skambinamosios sąsajos pabaigą. Tikiuosi, kad supratote „Java“ būsimą ir skambinamą sąsają.

Patikrinkite sukūrė „Edureka“ - patikima internetinė mokymosi įmonė, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą. „Edureka“ mokymai ir sertifikavimo kursai „Java J2EE“ ir „SOA“ skirti studentams ir specialistams, norintiems būti „Java“ kūrėjais.

Turite mums klausimą? Prašau tai paminėti šio tinklaraščio „Skambinanti sąsaja„ Java “komentarų skyriuje, ir mes kuo greičiau susisieksime su jumis.