Kuinka toteuttaa soitettava käyttöliittymä Java-käyttöjärjestelmässä



Tämä artikkeli antaa sinulle yksityiskohtaisen ja kattavan tiedon siitä, kuinka Callable Interface otetaan käyttöön Java-sovelluksessa.

Java-monisäikeiset ohjelmat todistavat laajan käytön Soitettava ja tulevaisuus. Langat ja monisäikeinen ketju edellyttävät, että lukijat pystyvät paremmin tarttumaan tämän artikkelin keskusteluun. Koska selitän Java-soitettavaa käyttöliittymää tässä artikkelissa.

Kertaa langoista

Haluan kuitenkin antaa vain lyhyt esittely langan käsitteestä. Lanka on erillinen suorituspolku, jos joudut suorittamaan toistuvan tehtävän, työ voidaan jakaa useisiin tehtäviin ja määrittää ne ketjuihin. Monisäikeinenei ole muuta kuin määrätä useita ketjuja suorittamaan erilaisia ​​tehtäviä rinnakkain, jotta tulos saadaan nopeasti.





Mikä on Java-soitettava käyttöliittymä

Java 5: lle esiteltiin luokka ”java.util.concurrent”. Tämä soitettava käyttöliittymä tuotiin samanaikaisuuspaketin kautta, joka näytti samanlaiselta kuin Runnable-käyttöliittymä. Se voi myös palauttaa minkä tahansa esineen ja pystyy heittämään poikkeuksen. Java Callable -käyttöliittymä käyttää Genericsia, mikä mahdollistaa minkä tahansa tyyppisen objektin palauttamisen. Executor Framework antaa Submit () -menetelmän Callable-toteutusten suorittamiseksi ketjusarjassa. Todellisuudessa Java Executor Framework noudattaa WorkerThread-malleja.

java-interfaceLank poolissa käyttäjät voivat aloittaa ketjut Executors.newFixedThreadPool (10) -menetelmällä ja lähettää tehtävän vastaavasti. Suoritettava toimii ketjun kohteena ja public void run () -menetelmä on pakollisesti toteutettu tehtävän määrittelemiseksi. Tämä toteutetaan ketjujen ryhmässä. Alueen ketjujen saatavuuden perusteella Executor Framework määrittää työn (suoritettava kohde) ketjuille.Jos kaikki säikeet ovat käytössä, tehtävä on pysäytettävä. Kun ketju on suorittanut yhden tehtävän, se palaa pooliin käytettävissä olevana ketjuna, joka on valmis hyväksymään tulevat tehtävät. Callable on samanlainen kuin Runnable ja voi palauttaa minkä tahansa tyyppisen objektin, kun haluamme saada tuloksen tai tilan tehtävästä.



Soitettavan käyttöliittymän palautus

Java Callable palauttaa java.util.concurrent. Java Future tarjoaa Cancel () -menetelmän liittyvän Callable-tehtävän poistamiseksi. Tämä on get () -menetelmän ylikuormitettu versio, jossa voidaan määrittää tietty aika tuloksen odottamiseen. On hyödyllistä välttää nykyistä ketjua, joka voi olla tukossa pidempään. Muista, että get-menetelmä on synkroninen menetelmä, ja kunnes soitettava on suorittanut tehtävänsä ja palauttanut arvon, sen on odotettava soitettavaa.

mitä eroa on gitillä ja githubilla

On myös 'isDone ()' ja 'isCancelled ()' menetelmiä liittyvän soitettavan tehtävän nykyisen tilan noutamiseksi. Tarkastellaan esimerkkiä, jossa on löydettävä kaikkien numeroiden summa yhdestä 100: een. Voimme silmukata 1-100 peräkkäin ja lisätä ne lopulta. Toinen mahdollisuus on jakaminen ja valloittaminen. Tässä menetelmässä voimme ryhmitellä numerot siten, että jokaisella ryhmällä on täsmälleen kaksi elementtiä. Lopuksi voimme määrittää kyseisen ryhmän ketjujoukkoon. Siksi kukin säie palauttaa osittaisen summan rinnakkain ja kerää sitten osittaiset summat ja lisää ne saadakseen koko summan.



Soitettavan ja tulevaisuuden luokan ominaisuudet

  • Soitettava luokka on SAM-tyyppinen rajapinta, joten se voidaan toteuttaa lambda-lausekkeessa.

  • Soittokelpoisella luokalla on vain yksi menetelmä 'call ()', joka sisältää kaiken asynkroniseen suoritukseen tarvittavan koodin.

  • Suoritettavassa käyttöliittymäympäristössä ei ollut mahdollista palauttaa laskennan tai heitetyn tarkistetun poikkeuksen tulosta. Kun Callable palauttaa arvon ja heittää tarkistetun poikkeuksen, on käytettävissä.

  • Get () Future-luokan menetelmää voidaan käyttää tulosten hakemiseen, kun laskenta on valmis. Käyttäjät voivat myös tarkistaa, onko laskenta päättynyt vai ei, käyttämällä done () -menetelmää.

    kuinka kääntää numero pythonissa
  • Laskennan peruuttaminen future.cancel () -menetelmällä on myös hyöty joissakin sovelluksissa.

  • Get () kutsutaan estokutsuksi ja se jatkaa estämistä, kunnes laskenta on valmis.

Soitettavien ja ajettavien luokkien vertailu

Soitettava Ajettava
Se on osa java.util.concurrent ' paketti Java 1.5: n jälkeenSe on osa java.lang-pakettia Java 1.0: n jälkeen
Parametroitu käyttöliittymä, kuten CallableParametroimaton käyttöliittymä
Pystyy heittämään tarkistetun poikkeuksenSe ei voi heittää tarkistettua poikkeusta
Se sisältää yhden menetelmän, call (), joka palauttaa tyypin V, tämä on sama kuin määritetty käyttöliittymän parametri 'Type'Tässä se sisältää yhden menetelmän, jota kutsutaan run (), joka palauttaa void

Alla on yksinkertainen esimerkki toteutetusta Java-luokasta, jossa koodi palauttaa tietyn ketjun nimen, joka suorittaa tehtävän yhden sekunnin kuluttua. Täällä käytämme poimintakehystä 100 tehtävän suorittamiseen Java Future -ohjelman kanssa lähetettyjen tehtävien tulokseen. Ensimmäinen katkelma on lähtö ja alla oleva koodi edustaa koodia.

paketti com.journaldev.threads import java.util.ArrayList import java.util.Date import java.util.List import java.util.concurrent.Callable import java.util.concurrent.ExecutionException import java.util.concurrent.ExecutorService import java .util.concurrent.Suorittajat tuovat java.util.concurrent.Future julkisen luokan MyCallable toteuttaa Callable {@Override public String call () heittää poikkeuksen {Thread.sleep (1000) // palauttaa tämän kutsuvan tehtävän suorittavan ketjun nimen return Thread.currentThread () .getName ()} public static void main (String args []) {// Hanki ExecutorService Executors -työkaluluokasta, ketjupoolin koko on 10 ExecutorService executor = Executors.newFixedThreadPool (10) // luo luettelo tulevaisuuden pitämiseksi objekti, joka liittyy soittolistaanlist = new ArrayList() // Luo MyCallable-ilmentymä Callable callable = new MyCallable () kohteelle (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-palvelujen sulkeminen

Ratkaiseva ja tärkeä näkökohta, jota monet kehittäjät kaipaavat, on ExecutorService-ohjelman sulkeminen. ExecutorService on elintärkeä ja se luodaan ylimääräisillä säikeelementeillä. Muista, että JVM pysähtyy vain, kun kaikki muut kuin daemon-ketjut pysäytetään. Siten pelkkä suorittimen sulkeminen estää JVM: ää pysähtymästä.

Jos haluat kertoa toteuttajapalvelulle, että ketjuja ei tarvitse ajaa, meidän on suljettava palvelu.

menetelmän ylikuormitus vs. menetelmän ohittaminen

Sammuttamista voidaan käyttää kolmella tavalla:

  • tyhjä sammutus () - Tämä käynnistää järjestäytyneen sammutuksen, jossa aiemmin lähetetyt tehtävät suoritetaan, mutta uusia tehtäviä ei hyväksytä.
  • Luettelon sammutusNow () - Se yrittää lopettaa kaikki aktiivisesti suoritettavat tehtävät, keskeyttää odottavien tehtävien käsittelyn ja palauttaa myös luettelon suoritusta odottavista tehtävistä.
  • void awaitTermination () - Tämä estää edelleen, kunnes kaikki tehtävät on suoritettu loppuun sammutuspyynnön jälkeen tai aikakatkaisu tapahtuu. Se myös estää, kun nykyinen ketju keskeytetään. Kaikki riippuu siitä, mikä tehtävä tulee ensin.

Tämän avulla olemme päässeet Java-soitettavan käyttöliittymän loppuun. Toivon, että sait käsityksen tulevaisuuden ja soitettavasta käyttöliittymästä Javassa.

Katso Edureka, luotettava verkko-oppimisyritys, jolla on yli 250 000 tyytyväisen oppijan verkosto, joka levisi ympäri maailmaa. Edurekan Java J2EE- ja SOA-koulutus- ja sertifiointikurssi on suunniteltu opiskelijoille ja ammattilaisille, jotka haluavat olla Java-kehittäjiä.

Onko sinulla kysymys meille? Mainitse se tämän 'Callable Interface in Java' -blogin kommenttiosassa, niin otamme sinuun yhteyttä mahdollisimman pian.