Razlika između klase niti i sučelja za izvođenje u Javi

Autor: Laura McKinney
Datum Stvaranja: 1 Travanj 2021
Datum Ažuriranja: 14 Svibanj 2024
Anonim
9. Programiranje - JAVA - ECLIPSE - Apstraktne klase i Interfejsi
Video: 9. Programiranje - JAVA - ECLIPSE - Apstraktne klase i Interfejsi

Sadržaj


Konac se može definirati na dva načina. Prvo od produljenje klase niti koji je već implementirao Runnable sučelje. Drugo, izravno implementacija Runnable sučelja, Kada definirate nit širenjem klase Thread, morate prevladati metodu run () u klasi Thread. Kada definirate nit koja implementira Runnable sučelje, morate implementirati jedinu metodu run () Runnable sučelja. Osnovna razlika između Thread-a i Runnable-a je u tome što svaka nit definirana proširenjem klase Thread-a stvara jedinstveni objekt i povezuje se s tim objektom. S druge strane, svaka nit definirana implementacijom sučelja Runnable dijeli isti objekt.

Promatrajmo neke druge razlike između navoja i Runnable uz pomoć tablice za usporedbu prikazanu dolje:

  1. Usporedni grafikon
  2. definicija
  3. Ključne razlike
  4. Zaključak

Usporedni grafikon

Osnove za usporedbuNitRunnable
Osnovni, temeljniSvaka nit stvara jedinstveni objekt i povezuje se s njim.Više niti dijeli iste predmete.
Memorija Kako svaka nit stvara jedinstveni objekt, potrebno je više memorije.Kako više niti dijeli isti objekt, tako se manje memorije koristi.
ProduljenjeU Javi višestruko nasljeđivanje nije dopušteno, stoga, nakon što klasa proširi klasu niti, ne može proširiti nijednu drugu klasu.Ako klasa definira nit implementirajući Runnable sučelje, ona ima šansu proširiti jednu klasu.
Koristiti Korisnik mora proširiti klasu niti samo ako želi nadjačati ostale metode u klasi niti.Ako želite samo specijalizirati način izvođenja, tada je implementacija Runnable-a bolja opcija.
spojka Produljenje klase niti uvodi čvrsto spajanje jer klasa sadrži šifru klase niti i posao dodijeljen nitiUvođenjem Runnable sučelja uvodi labavo spajanje jer je kod Thread-a odvojen od zadatka Threads.


Definicija klase navoja

Nit je klasa u java.lang paket. Klasa niti proteže se an Objekt klase, i provodi Runnable sučelja. Klasa Thread ima konstruktore i metode za stvaranje i rad na niti. Kad stvorimo više niti, svaka nit stvara jedinstveni objekt i povezujemo se s tim objektom. Ako stvorite nit koja proširuje klasu niti, nadalje ne možete proširiti nijednu drugu klasu jer java ne podržava višestruko nasljeđivanje. Dakle, trebali biste odlučiti proširiti klasu Thread samo kada želite prevladati i neke druge metode klase Thread. Pogledajmo primjer stvaranja niti koja proširuje klasu Thread.

/ * Definiranje niti * / Klasa Mythread produžuje Thread {/ * posao niti * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread" ); }} Class mainThread {/ * posao glavne niti * / javni statički void main (String args) {Mythread mt = novi Mythread (); / * glavna nit stvorila je podređeni nit * / mt.start (); for (int i = 0; i <10; i ++) {System.Out. ("glavni navoj"); }}} / * Izlaz * / glavna nit glavna nit glavna nit glavna nit glavna nit dječja nit dječja nit dječja nit dječja nit dječja nit glavna nit dječja nit glavna nit glavna nit glavna nit dječja nit dječja nit glavna nit glavna nit glavna nit dijete nit

U gornjem kôdu stvaram klasu Mythread koja proširuje klasu Thread i nadjačava način izvođenja klase Thread. U klasi koja sadrži glavnu metodu kreiram nitni objekt (mt) klase Mythread i koristeći nitni objekt pozvao je metodu start (). Metoda pokretanja započinje izvršenje niti i JVM istovremeno poziva metodu izvođenja niti. Sada su u programu dvije niti jedna glavna nit i druga podređena nit koju je stvorio glavni nit. Izvođenje oba konca odvija se istovremeno, ali, točan izlaz se ne može pretvarati.


Definicija Runnable sučelja

Runnable je sučelje u java.lang paket. Implementacijom Runnable sučelja možemo definirati nit. Sučelje koje se može izvoditi ima jedinstvenu metodu trčanje(), koju provodi klasa koja implementira Runnable sučelje. Kada odlučite definirati nit implementirajući Runnable sučelje, i dalje imate izbor proširiti bilo koju drugu klasu. Kada stvorite više niti primjenom sučelja Runnable, svaka nit dijeli istu instancu koju je moguće pokrenuti. neka nas nauče kako definirati nit pomoću Runnable sučelja.

/ * Definiranje niti * / Klasa Runnablethread provodi Runnable {/ * posao niti * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread" ); }} Class mainThread {/ * posao glavne niti * / javni statički void main (String args) {Mythread rt = novi Mythread (); / * glavna nit stvorila je objekt koji se može pokrenuti * / Thread t = new Thread (rt); / * glavna nit stvara podređeni nit i prosljeđuje objekt koji se može pokrenuti * / t.start (); for (int i = 0; i <10; i ++) {System.Out. ("glavni navoj"); }}} / * Izlaz * / glavna nit glavna nit glavna nit glavna nit glavna nit dječja nit dječja nit dječja nit dječja nit dječja nit glavna nit dječja nit glavna nit glavna nit glavna nit dječja nit dječja nit glavna nit glavna nit glavna nit dijete nit

U gornjem kôdu stvorio sam klasu Runnablethread koja implementira Runnable sučelje i definira posao niti primjenom metode run () metode sučelja Runnable. Tada kreiram klasu Mainthread koja sadrži glavnu metodu. Unutar glavne metode, deklarirao sam objekt koji se može pokrenuti razredom Runnablethread i proslijedio taj objekt Konstruktoru Thread-a, istovremeno izjavljujući nit. Na ovaj način povezao sam nitni objekt (t) s objektom koji se može pokrenuti (rt). Tada predmet niti poziva metodu početka niti koja dalje poziva metodu izvođenja klase Runnablethread. Da nisam povezao objekt koji se može pokrenuti s Thread objektom, tada bi metoda pokretanja niti pozvala metodu izvođenja klase Thread. Sada, opet, postoje dvije niti u kodu, glavna nit i glavna nit stvaraju podređeni nit oba se izvršavaju istovremeno, ali točan izlaz se nikada ne može pretvarati.

Ključne razlike između niti i teme koje se mogu izvoditi u Javi

  1. Svaka nit stvorena proširivanjem klase Thread stvara jedinstveni objekt za to i povezuje se s tim objektom. S druge strane, svaka nit stvorena primjenom sučelja Runnable dijeli istu instancu koju je moguće pokrenuti.
  2. Kako je svaka nit povezana s jedinstvenim objektom kada je stvorena proširivanjem klase Thread, potrebno je više memorije. S druge strane, svaka nit stvorena primjenom sučelja Runnable dijeli isti objektni prostor, pa mu je potrebno manje memorije.
  3. Ako dodatno proširite klasu Thread, možete naslijediti bilo koju drugu klasu jer Java ne dopušta višestruko nasljeđivanje, a implementacija Runnable-a i dalje daje šansu za klasu da naslijedi bilo koju drugu klasu.
  4. Valja proširiti klasu Thread samo ako mora nadjačati ili specijalizirati neke druge metode klase Thread. Morate implementirati Runnable sučelje ako želite samo specijalizirati samo način izvođenja.
  5. Produljivanje klase Thread uvodi čvrsto umetanje u kod, jer kod Nit i posao niti su iste klase. S druge strane, implementacija Runnable sučelja uvodi labavo spajanje u kod, jer se kod Thread-a izdvaja od zadatka dodijeljenog niti.

Zaključak:

Poželjno je implementirati Runnable sučelje umjesto produžavanja klase Thread. Kako implementacija Runnable-a čini vaš kôd lagano povezan jer se kôd niti razlikuje od klase kojoj zadatak dodijelite. Potrebno je manje memorije i također omogućuje razredu nasljeđivanje bilo koje druge klase.