Razlika med razredom navojev in vmesnikom, ki ga je mogoče voditi

Avtor: Laura McKinney
Datum Ustvarjanja: 1 April 2021
Datum Posodobitve: 14 Maj 2024
Anonim
Part 94   Difference between Monitor and lock in C#
Video.: Part 94 Difference between Monitor and lock in C#

Vsebina


Navoj je mogoče opredeliti na dva načina. Najprej mimo razširitev razreda niti ki je že implementiral vmesnik Runnable. Drugič, neposredno izvajanje vmesnika Runnable. Ko določite nit z razširitvijo razreda Thread, morate preglasiti metodo run () v razredu Thread. Ko določite nit, ki izvaja vmesnik Runnable, morate implementirati edino metodo run () vmesnika Runnable. Osnovna razlika med Thread in Runnable je, da vsaka nit, definirana z razširitvijo razreda Thread, ustvari edinstven predmet in se poveže s tem objektom. Po drugi strani ima vsaka nit, definirana z izvajanjem vmesnika Runnable, isti predmet.

Opazimo še nekaj razlik med Thread in Runnable s pomočjo spodnje primerjalne tabele:

  1. Primerjalna tabela
  2. Opredelitev
  3. Ključne razlike
  4. Zaključek

Primerjalna tabela

Osnove za primerjavoNitiIzvlečna
OsnovniVsaka nit ustvari edinstven predmet in se z njim poveže.Več niti ima iste predmete.
Spomin Ko vsaka nit ustvari edinstven predmet, je potrebno več pomnilnika.Ker si isti predmet deli isti predmet, se uporabi manj pomnilnika.
PodaljševanjeV Javi večkratno dedovanje ni dovoljeno, zato po tem, ko razred razširi Thread razred, ne more razširiti nobenega drugega razreda.Če razred definira nit, ki izvaja vmesnik Runnable, ima možnost razširiti en razred.
Uporaba Uporabnik mora razširiti razred niti samo, če želi preglasiti druge metode v razredu niti.Če želite samo specializirati način izvajanja, je izvedba Runnable boljša možnost.
Spojka Razširitev razreda navojev uvaja tesno spenjanje, saj razred vsebuje kodo razreda Thread in tudi opravilo, dodeljeno nitiImplementacija vmesnika Runnable uvaja ohlapno spenjanje, saj je koda navoja ločena od opravila niti.


Opredelitev razreda navojev

Niti je razred v java.lang paket. Razred niti se razteza na Predmet razred, in izvaja Izvlečna vmesniki. Razred Thread ima konstruktorje in metode za ustvarjanje in delovanje na nitki. Ko ustvarimo več niti, vsaka nit ustvari edinstven predmet in se poveže s tem objektom. Če ustvarite nit, ki razširja razred Thread, nadalje ne morete razširiti nobenega drugega razreda, saj java ne podpira večkratnega dedovanja. Torej, raje razširite razred Thread le, če želite preglasiti tudi nekatere druge metode razreda Thread. Poglejmo primer ustvarjanja niti, ki podaljša razred Thread.

/ * Določitev niti * / Razred Mythread podaljša Thread {/ * opravilo niti * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread" ); }} Class mainThread {/ * opravilo glavne niti * / javni statični void main (String args) {Mythread mt = nov Mythread (); / * glavna nit je ustvarila nadrejeno nit * / mt.start (); za (int i = 0; i <10; i ++) {System.Out. ("glavna nit"); }}} / * Izhod * / glavna nit glavna nit glavna nit nit glavna nit otroška nit otroška nit otroška nit otroška nit otroška nit glavna nit otroška nit glavna nit glavna nit nit otroška nit otroška nit glavna nit glavna nit otroška nit otroška nit glavna nit

V zgornji kodi ustvarim razred Mythread, ki razširi razred Thread in preglasi način izvajanja razreda Thread. V razredu, ki vsebuje glavno metodo, ustvarim nitni predmet (mt) razreda Mythread in s pomočjo predmeta nit prikliče metodo start (). Metoda zagona začne izvajanje niti in hkrati JVM prikliče postopek zagona niti. Zdaj sta v programu dve niti ena glavna nit in druga podrejena nit, ki jo ustvari glavna nit. Izvedba obeh niti poteka istočasno, vendar natančnega izhoda ni mogoče pretvarjati.


Opredelitev izvedljivega vmesnika

Izvlečna je vmesnik v java.lang paket. Z izvajanjem vmesnika Runnable lahko določimo nit. Izvajalni vmesnik ima eno samo metodo teči (), ki ga izvaja razred, ki izvaja vmesnik Runnable. Ko se odločite definirati nit, ki bo izvajal vmesnik Runnable, imate še vedno možnost razširiti kateri koli drug razred. Ko z uporabo vmesnika Runnable ustvarite več niti, ima vsaka nit isti primerek, ki ga je mogoče izvesti. se naučimo, kako določiti nit z uporabo vmesnika Runnable.

/ * Določitev niti * / Razred Runnablethread izvaja Runnable {/ * opravilo niti * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread" ); }} Class mainThread {/ * opravilo glavne niti * / javni statični void main (String args) {Mythread rt = nov Mythread (); / * glavna nit je ustvarila izvedljiv predmet * / Niti t = nova nit (rt); / * glavna nit ustvari nadrejeno nit in prenese predmet, ki ga je mogoče izvesti * / t.start (); za (int i = 0; i <10; i ++) {System.Out. ("glavna nit"); }}} / * Izhod * / glavna nit glavna nit glavna nit nit glavna nit otroška nit otroška nit otroška nit otroška nit otroška nit glavna nit otroška nit glavna nit glavna nit nit otroška nit otroška nit glavna nit glavna nit otroška nit otroška nit glavna nit

V zgornji kodi sem ustvaril razred Runnablethread, ki izvaja vmesnik Runnable in definira opravilo niti z izvajanjem metode run () vmesnika Runnable. Nato ustvarim glavno nit razreda, ki vsebuje glavno metodo. Znotraj glavne metode sem deklariral objekt, ki ga je mogoče izvleči iz razreda Runnablethread in ga ob izjavi niti posredoval temo konstruktorju Thread. Na ta način sem povezal predmet niti (t) z objektom, ki ga je mogoče voditi (rt). Nato predmet niti prikliče način zagona niti, ki nadalje prikliče način izvajanja razreda Runnablethread. Če ne bi povezal izvedljivega predmeta s predmetom Thread, bi metoda začetka niti sprožila metodo zagon razreda Thread. Zdaj sta v kodi dve nitki, glavna nit in glavna nit ustvarjata nadrejeno nit, oba se izvajata istočasno, vendar natančnega izhoda ni mogoče nikoli pretvarjati.

Ključne razlike med navojem in izvajanjem v Javi

  1. Vsaka nit, ustvarjena z razširitvijo razreda Thread, ustvari zanj edinstven predmet in se poveže s tem objektom. Po drugi strani pa vsaka nit, ustvarjena z uvedbo vmesnika Runnable, deli enak primerek, ki ga je mogoče izvesti.
  2. Ker je vsaka nit povezana z edinstvenim predmetom, ko je ustvarjena z razširitvijo razreda Thread, je potrebno več pomnilnika. Po drugi strani pa vsaka nit, ustvarjena z uvedbo vmesnika Runnable, deli isti objektni prostor, zato potrebuje manj pomnilnika.
  3. Če še naprej razširite razred Thread, lahko podedujete kateri koli drug razred, saj Java ne dovoljuje večkratnega dedovanja, medtem ko izvajanje Runnable še vedno ponuja priložnost, da razred nasledi kateri koli drug razred.
  4. Razred Thread mora razširiti le, če mora preglasiti ali specializirati nekatere druge metode razreda Thread. Vmesnik Runnable morate implementirati, če želite samo specializirati samo način izvajanja.
  5. Razširitev razreda Niti uvaja tesno spajanje v kodo, saj koda niti in opravila niti vsebuje isti razred. Po drugi strani vmesnik Implementacija Runnable v kodo uvaja ohlapno spajanje, saj je koda navoja ločena od opravila, dodeljenega niti.

Zaključek:

Raje je namesto razširitve Thread razreda uporabiti vmesnik Runnable. Ko implementacija Runnable vašo kodo ohlapno poveže, saj se koda niti razlikuje od razreda, ki nitki dodeli nalogo. Zahteva manj pomnilnika in prav tako omogoča, da razred podeduje kateri koli drug razred.