Cum se implementează interfața apelabilă în Java



Acest articol vă va oferi o cunoaștere detaliată și cuprinzătoare a modului de implementare a interfeței apelabile în Java cu exemple.

Programele Java multithreading sunt martorii utilizării extinse Apelabil și viitor. Conform cunoștințelor prealabile despre fire și multi-threading, cititorii vor putea înțelege mai bine discuțiile din acest articol. Așa cum voi explica interfața apelabilă în Java în acest articol.

Recapitulați pe fire

Cu toate acestea, permiteți-mi să fac o scurtă introducere asupra conceptului de fire. Un fir de execuție este o cale separată de execuție, în cazul în care trebuie să efectuați o sarcină repetitivă, lucrarea poate fi împărțită în mai multe sarcini și atribuirea acestora la fire. Multi-threadingnu este altceva decât alocarea mai multor fire pentru a executa diferite sarcini în paralel pentru a obține rezultatul rapid.





Ce este interfața apelabilă în Java

Pentru Java 5, a fost introdusă clasa „java.util.concurrent”. Această interfață apelabilă a fost introdusă prin intermediul pachetului de concurență care arăta similar cu interfața Runnable. De asemenea, poate returna orice obiect și este capabil să arunce o excepție. O interfață Java Callable folosește Generics, făcând astfel posibilă returnarea oricărui tip de obiect. Executor Framework oferă o metodă submit () pentru a executa implementări Callable într-un grup de fire. În realitate, Java Executor Framework aderă la modelele WorkerThread.

java-interfaceÎntr-un grup de fire, utilizatorii pot iniția fire utilizând metoda Executors.newFixedThreadPool (10) și, în consecință, îi pot trimite o sarcină. Un runnable acționează ca țintă a unui thread, iar o metodă publică run void () este implementată obligatoriu pentru a defini sarcina. Acesta va fi executat de fire din grupul de fire. Pe baza disponibilității firelor din pool, Executor Framework atribuie lucru (țintă executabilă) firelor.Dacă toate firele sunt utilizate, sarcina trebuie blocată. După ce firul finalizează o sarcină, acesta revine la pool ca fir disponibil, care este gata să accepte sarcinile viitoare. Callable este similar cu Runnable și poate returna orice tip de obiect atunci când dorim să obținem un rezultat sau o stare din sarcină.



Revenirea interfeței apelabile

Java Callable returnează java.util.concurrent. Java Future oferă o metodă cancel () pentru a elimina sarcina Callable asociată. Aceasta este o versiune supraîncărcată a metodei get (), unde se poate specifica un anumit timp pentru a aștepta rezultatul. Este util să evitați un fir curent, care poate fi blocat pentru o perioadă mai lungă. Vă rugăm să rețineți că metoda get este o metodă sincronă și până când apelabilul își termină sarcina și returnează o valoare, va trebui să aștepte un apelabil.

Există, de asemenea, metode „isDone ()” și „isCancelled ()” pentru a prelua starea curentă a unei activități Callable asociate. Luați în considerare exemplul în care trebuie găsită o sumă a tuturor numerelor de la unu la 100. Putem bucla de la 1 la 100 secvențial și adăugându-le în cele din urmă. O altă posibilitate este împărțirea și cucerirea. În această metodă, putem grupa numerele astfel încât fiecare grup să aibă exact două elemente. În cele din urmă, putem atribui acel grup unui grup de fire. Prin urmare, fiecare fir returnează o sumă parțială în paralel și apoi colectează acele sume parțiale și le adaugă pentru a obține suma totală.



Caracteristici ale clasei Callable și Future

  • Clasa apelabilă este o interfață de tip SAM și, prin urmare, poate fi implementată în expresia lambda.

  • Clasa apelabilă are o singură metodă „call ()” care conține tot codul necesar pentru a se executa asincron.

    setați calea clasei în linux
  • Într-un mediu de interfață rulabil, nu a existat nicio posibilitate de a returna rezultatul calculului sau de a arunca o excepție verificată. În timp ce Callable returnează o valoare și aruncă o excepție verificată este disponibilă.

  • Metoda Get () a clasei Future poate fi utilizată pentru a extrage rezultatele odată ce calculul este finalizat. Utilizatorii pot verifica, de asemenea, dacă calculul este terminat sau nu utilizând metoda done ().

  • Anularea calculului utilizând metoda future.cancel () este, de asemenea, un avantaj în unele aplicații.

  • Get () se numește apel de blocare și continuă să se blocheze până la finalizarea calculului.

Compararea claselor apelabile și executabile

Apelabil Runable
Face parte din „ java.util.concurrent ' pachet de la Java 1.5Face parte din pachetul java.lang de la Java 1.0
O interfață parametrizată, cum ar fi CallableO interfață fără parametri
Capabil să arunce o excepție bifatăNu poate arunca o excepție bifată
Conține o singură metodă, call (), care returnează Tipul V, acesta este același cu parametrul de interfață definit „Tipul”Aici conține o singură metodă, numită run (), care returnează nul

Mai jos este un exemplu simplu de clasă Java apelabilă implementată în care codul returnează numele firului specific, care execută sarcina după o secundă. Aici utilizăm cadrul extractor pentru a executa 100 de sarcini în paralel cu Java Future până la rezultatul sarcinilor trimise. Primul fragment este rezultatul, iar cel de mai jos reprezintă codul.

pachet 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.Executors import java.util.concurrent.Future public class MyCallable implements Callable {@Override public String call () throws Exception {Thread.sleep (1000) // returnează numele firului executând această sarcină apelabilă returnează Thread.currentThread () .getName ()} public static void main (String args []) {// Obțineți ExecutorService din clasa de utilitate Executori, dimensiunea grupului de fire este de 10 ExecutorService executant = Executori.newFixedThreadPool (10) // creați o listă pentru a deține Viitorul obiect asociat cu Lista apelabilălist = ArrayList nou() // Create MyCallable instance 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() } } 

Închiderea serviciilor executorilor

Aspectul crucial și important pe care mulți dezvoltatori îl ratează este închiderea ExecutorService. ExecutorService este vital și este creat cu elemente de fire suplimentare. Rețineți că JVM se oprește numai atunci când toate firele non-demon sunt oprite. Astfel, pur și simplu închiderea serviciului executor împiedică oprirea JVM.

cum se folosește br în html

Pentru a spune serviciului executant că nu este nevoie ca firele să fie rulate, ar trebui să închidem serviciul.

Există trei moduri de a invoca închiderea:

  • oprire nulă () - Aceasta inițiază o oprire ordonată în care sunt executate sarcinile trimise anterior, dar nu sunt acceptate sarcini noi.
  • List shutdownNow () - Încearcă să oprească toate executarea activă a sarcinilor, oprește procesarea sarcinilor în așteptare și, de asemenea, returnează o listă a sarcinilor care așteptau executarea.
  • void awaitTermination () - Acest lucru continuă să se blocheze până când toate sarcinile au terminat execuția după o cerere de închidere sau până când are loc expirarea. De asemenea, se blochează atunci când firul curent este întrerupt. Totul depinde de sarcina care este pe primul loc.

Cu aceasta, ajungem la sfârșitul articolului Interfață apelabilă în Java. Sper că ați înțeles viitorul și interfața apelabilă în Java.

Verificați de Edureka, o companie de învățare online de încredere, cu o rețea de peste 250.000 de elevi mulțumiți răspândiți pe tot globul. Cursul de formare și certificare Java J2EE și SOA al Edureka este conceput pentru studenți și profesioniști care doresc să fie dezvoltator Java.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui blog „Interfață apelabilă în Java” și vă vom contacta cât mai curând posibil.