Kako implementirati pozivno sučelje u Javi



Ovaj će vam članak pružiti detaljno i sveobuhvatno znanje o tome kako primijeniti Callable Interface u Javi s primjerima.

Java multithreading programi svjedoče o korištenju opsežnih Pozovljivo i budućnost. Pod preduvjetom poznavanja niti i višestrukog navoja, čitatelji će moći bolje razumjeti raspravu u ovom članku. Kao što ću objasniti Callable Interface u Javi u ovom članku.

Ukratko o nitima

Međutim, dopustite mi samo kratki uvod u pojam niti. Nit je zaseban put izvršenja, u slučaju da trebate izvršiti ponavljajući zadatak, rad se može rastaviti na više zadataka i dodijeliti nitima. Višenavojnostnije ništa drugo nego dodjeljivanje više niti za paralelno izvršavanje različitih zadataka kako bi se brzo dobio rezultat.





Što je pozivno sučelje u Javi

Za Javu 5 uvedena je klasa 'java.util.concurrent'. Ovo pozivno sučelje dovedeno je putem paralelnog paketa koji je izgledao slično Runnable sučelju. Također može vratiti bilo koji objekt i može izbaciti iznimku. Sučelje Java Callable koristi generičke, što omogućuje vraćanje bilo koje vrste objekta. Executor Framework daje metodu submit () za izvršavanje Callable implementacija u spremištu niti. U stvarnosti, Java Executor Framework pridržava se uzoraka WorkerThread.

java-interfaceU spremištu niti korisnici mogu inicirati niti pomoću metode Executors.newFixedThreadPool (10) i prema tome mu predati zadatak. Izvodljivi se ponaša kao cilj niti, a javna void metoda run () obavezno se provodi za definiranje zadatka. To će izvršiti niti u spremištu niti. Na temelju dostupnosti niti u spremištu, izvršni okvir dodijeljuje rad (cilj koji se može izvoditi) nitima.Ako se koriste sve niti, zadatak mora biti zaustavljen. Nakon što nit dovrši jedan zadatak, vraća se u spremište kao dostupna nit koja je spremna prihvatiti buduće zadatke. Callable je sličan Runnableu i može vratiti bilo koju vrstu objekta kada želimo dobiti rezultat ili status zadatka.



Povratak sučelja koje se može pozvati

Java Callable vraća java.util.concurrent. Java Future nudi metodu cancel () za uklanjanje povezanog zadatka koji se može pozvati. Ovo je preopterećena verzija metode get (), gdje se može odrediti određeno vrijeme za čekanje rezultata. Korisno je izbjeći trenutnu nit koja može biti blokirana na duže vrijeme. Imajte na umu da je metoda get sinkrona metoda i dok pozivi ne završi svoj zadatak i ne vrati vrijednost, morat će pričekati poziv.

Postoje i metode „isDone ()“ i „isCancelled ()“ za dohvaćanje trenutnog statusa pridruženog zadatka koji se može pozvati. Razmotrimo primjer gdje treba pronaći zbroj svih brojeva od jedan do 100. Možemo petlju od 1 do 100 uzastopno dodati i konačno ih dodati. Druga je mogućnost dijeljenjem i osvajanjem. Ovom metodom možemo brojeve grupirati na način da svaka grupa ima točno dva elementa. Konačno, možemo pridružiti tu skupinu skupu niti. Stoga svaka nit paralelno vraća djelomični zbroj, a zatim prikuplja te djelomične zbrojeve i dodaje ih da bi se dobio cijeli zbroj.



Značajke Callable i Future Class

  • Klasa koja se može pozvati je sučelje tipa SAM i stoga se može implementirati u lambda izraz.

    sol vs kuhar vs lutka
  • Klasa koja se može pozvati ima samo jednu metodu 'call ()' koja sadrži sav kôd potreban za asinkrono izvršavanje.

  • U okruženju sučelja koje je moguće pokrenuti, nije bilo mogućnosti vratiti rezultat izračuna ili izbaciti provjerenu iznimku. Dok je s Callable-om vraćanje vrijednosti i bacanje označene iznimke dostupno.

  • Get () metoda klase Future može se koristiti za dohvaćanje rezultata nakon završetka izračuna. Korisnici također mogu provjeriti je li izračunavanje završeno ili nije pomoću metode done ().

  • Otkazivanje izračuna uporabom metode future.cancel () također je blagodat u nekim aplikacijama.

  • Get () naziva se pozivom za blokiranje i nastavlja se blokirati dok se izračunavanje ne dovrši.

Usporedba klasa koje se mogu pozivati ​​i izvoditi

Pozivno Izvodljivo
To je dio java.util.concurrent ' paket od Jave 1.5Dio je paketa java.lang od Jave 1.0
Parametrizirano sučelje, poput CallableNeparametrizirano sučelje
Sposoban za bacanje provjerene iznimkeNe može baciti provjerenu iznimku
Sadrži jednu metodu, call (), koja vraća tip V, to je isto kao definirani parametar sučelja 'Type'Ovdje sadrži jednu metodu, nazvanu run (), koja vraća void

Ispod je jednostavni primjer implementirane klase Java koja se može pozvati, a kôd vraća ime određene niti koja izvršava zadatak nakon jedne sekunde. Ovdje koristimo ekstraktorski okvir za izvršavanje 100 zadataka paralelno s Java Future do rezultata predanih zadataka. Prvi isječak je izlaz, a dolje predstavlja kôd.

paket 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.ExecutorService import java.util.concurrent.ExecutorService import java.util.concurrent. .util.concurrent.Executors import java.util.concurrent.Future javna klasa MyCallable implementira Callable {@Override public String call () baca izuzetak {Thread.sleep (1000) // vrati ime niti koje izvršava ovaj pozivni zadatak return Thread.currentThread () .getName ()} public static void main (String args []) {// Nabavite ExecutorService iz klase uslužnih programa Executors, veličina spremišta niti je 10 ExecutorService executor = Executors.newFixedThreadPool (10) // stvorite popis za zadržavanje budućnosti objekt povezan s Popisom pozivapopis = novi ArrayList() // Izrada instance MyCallable Callable callable = new MyCallable () for (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() } } 

Isključivanje izvršnih usluga

Ključni i važan aspekt koji nedostaje mnogim programerima je gašenje ExecutorService. ExecutorService je od vitalnog značaja i stvoren je s dodatnim elementima niti. Imajte na umu da se JVM zaustavlja samo kada su zaustavljene sve ne-daemon niti. Stoga jednostavno isključivanje izvršne službe sprječava zaustavljanje JVM-a.

Da bismo rekli izvršnoj službi da nema potrebe za pokretanjem niti, trebali bismo isključiti uslugu.

Postoje tri načina za aktiviranje isključivanja:

  • isključivanje praznina () - Ovo pokreće uredno zaustavljanje u kojem se izvršavaju prethodno poslani zadaci, ali novi zadaci se ne prihvaćaju.
  • Popis shutdownNow () - Pokušava zaustaviti sve aktivno izvršavanje zadataka, zaustavlja obradu zadataka na čekanju, a također vraća popis zadataka koji su čekali izvršenje.
  • void awaitTermination () - Ovo se nastavlja blokirati sve dok svi zadaci ne završe izvršenje nakon zahtjeva za isključivanjem ili dok ne dođe do vremenskog ograničenja. Također blokira kada je trenutna nit prekinuta. Sve ovisi o tome koji je zadatak prvi.

Ovim smo došli do kraja članka Callable Interface u Javi. Nadam se da ste razumjeli buduće i pozivno sučelje na Javi.

Pogledajte Edureka, pouzdana tvrtka za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta. Edurekin tečaj za obuku i certificiranje Java J2EE i SOA namijenjen je studentima i profesionalcima koji žele biti programer Java.

pretvoriti niz u datum Java -

Imate pitanje za nas? Molimo vas da ga spominjete u odjeljku za komentare ovog bloga 'Sučelje koje se može pozivati ​​na Javi' i javit ćemo vam se što je prije moguće.