Atšķirība starp pavedienu klasi un izpildāmu interfeisu Java

Autors: Laura McKinney
Radīšanas Datums: 1 Aprīlis 2021
Atjaunināšanas Datums: 17 Maijs 2024
Anonim
Difference Between Implementing Runnable Interface and Extending Thread Class | Runnable vs Thread
Video: Difference Between Implementing Runnable Interface and Extending Thread Class | Runnable vs Thread

Saturs


Pavedienu var definēt divējādi. Pirmkārt, līdz pavedienu klases paplašināšana kas jau ir ieviesis izpildāmu saskarni. Otrkārt, tieši izpildāmā saskarnes ieviešana. Kad definējat pavedienu, paplašinot pavedienu klasi, pavediena klasē ir jānoraida run () metode. Kad definējat pavedienu, ar kuru tiek īstenota palaižamā saskarne, jums jāīsteno vienīgā palaižamās saskarnes palaišanas () metode. Pamata atšķirība starp pavedienu un izpildāmu ir tā, ka katrs pavediens, ko nosaka, paplašinot pavedienu klasi, rada unikālu objektu un tiek saistīts ar šo objektu. No otras puses, katram pavedienam, kas noteikts, realizējot Runnable saskarni, ir viens un tas pats objekts.

Izmantojot salīdzināšanas diagrammu, kas parādīta zemāk, novērosim dažas citas atšķirības starp Thread un Runnable:

  1. Salīdzināšanas tabula
  2. Definīcija
  3. Galvenās atšķirības
  4. Secinājums

Salīdzināšanas tabula

Salīdzināšanas pamatsVītnePalaižams
PamataKatrs pavediens izveido unikālu objektu un tiek ar to saistīts.Vairākos pavedienos ir vienādi objekti.
Atmiņas Tā kā katrs pavediens rada unikālu objektu, nepieciešama vairāk atmiņas.Tā kā vairākiem pavedieniem ir viens un tas pats objekts, tiek izmantota mazāk atmiņas.
PagarinotJava gadījumā vairāku mantojumu izmantošana nav atļauta, tāpēc pēc klases paplašināšanas Thread klasē tā nevar paplašināt nevienu citu klasi.Ja klase definē pavedienu, ar kuru tiek īstenota izpildāmā saskarne, tai ir iespēja pagarināt vienu klasi.
Izmantojiet Lietotājam jāpagarina pavedienu klase tikai tad, ja viņš vēlas ignorēt citas pavedienu klases metodes.Ja vēlaties specializēties tikai palaišanas metodē, labāka ir Runnable ieviešana.
Savienojums Paplašinot pavedienu klasi, tiek ieviesta cieša savienošana, jo klasē ir pavedienu klases kods un pavedienam piešķirtais darbsIeviešana Runnable saskarne ievieš vaļīgu savienošanu, jo pavedienu kods ir atsevišķs no pavedienu darba.


Vītnes klases definīcija

Vītne ir klase iekšā java.lang pakete. Vītņu klase paplašina Objekts klasei, un to īsteno Palaižams saskarnes. Vītņu klasei ir konstruktori un metodes pavediena izveidošanai un darbībai. Kad mēs izveidojam vairākus pavedienus, katrs pavediens izveido unikālu objektu un tiek saistīts ar šo objektu. Ja izveidojat pavedienu, kas paplašina pavedienu klasi, tālāk nevar paplašināt nevienu citu klasi, jo java neatbalsta vairāku mantojumu. Tātad, jums vajadzētu izvēlēties paplašināt pavedienu klasi tikai tad, ja vēlaties arī ignorēt dažas citas pavedienu klases metodes. Apskatīsim pavediena izveidošanas piemēru, kas paplašina pavedienu klasi.

/ * Pavediena noteikšana * / klases mythread paplašina pavedienu {/ * pavediena darbs * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread") ); }} Klases mainThread {/ * galvenā pavediena darbs * / publiski statiskā tukšā galvenā (stīgu loka) {Mythread mt = new Mythread (); / * galvenā vītne izveidoja bērnu pavedienu * / mt.start (); for (int i = 0; i <10; i ++) {System.Out. ("Galvenais pavediens"); }}} / * Izeja * / Galvenā vītne Galvenā vītne Galvenā vītne Galvenā vītne Bērnu vītne Bērnu vītne Bērna vītne Bērna vītne Bērna vītne Galvenā vītne Bērna vītne Galvenā vītne Galvenā vītne Bērna vītne Bērna vītne Galvenā vītne Galvenā vītne Galvenā vītne Bērna vītne Bērna vītne Galvenā vītne

Iepriekš norādītajā kodā es izveidoju klases Mythread, kas paplašina pavedienu klasi un ignorē pavedienu klases izpildes metodi. Klasē, kurā ir galvenā metode, es izveidoju Mythread klases pavediena objektu (mt) un, izmantojot diegu objektu, tika izsaukta sākuma () metode. Sākuma metode sāk pavediena izpildi, un tajā pašā laikā JVM izsauc pavediena izpildes metodi. Tagad programmā ir divi pavedieni, viens galvenais pavediens un otrais bērna pavediens, kuru izveidojis galvenais pavediens. Abu pavedienu izpilde notiek vienlaicīgi, taču precīzu iznākumu nevar izlikties.


Palaižamās saskarnes definīcija

Palaižams ir interfeiss iekš java.lang pakete. Īstenojot izpildāmu saskarni, mēs varam definēt pavedienu. Palaižamajam interfeisam ir viena metode palaist (), kuru īsteno klase, kas ievieš Runnable saskarni. Kad jūs izvēlaties definēt pavedienu, kas ievieš izpildāmu saskarni, jums joprojām ir izvēle paplašināt jebkuru citu klasi. Kad izveidojat vairākus pavedienus, ieviešot izpildāmu saskarni, katram pavedienam ir viens un tas pats izpildāmā instance. ļaujiet mums iemācīties definēt pavedienu, izmantojot Runnable saskarni.

/ * Vītnes definēšana * / Klases Runnablethread mašīna Runnable {/ * pavediena darbs * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread") ); }} Klases mainThread {/ * galvenā pavediena darbs * / publiski statiskā tukšā galvenā (stīgu loka) {Mythread rt = new Mythread (); / * galvenā vītne izveidoja palaižamo objektu * / Vītne t = jauna vītne (rt); / * galvenā vītne izveido bērnu pavedienu un nodod palaižamo objektu * / t.start (); for (int i = 0; i <10; i ++) {System.Out. ("Galvenais pavediens"); }}} / * Izeja * / Galvenā vītne Galvenā vītne Galvenā vītne Galvenā vītne Bērnu vītne Bērnu vītne Bērna vītne Bērna vītne Bērna vītne Galvenā vītne Bērna vītne Galvenā vītne Galvenā vītne Bērna vītne Bērna vītne Galvenā vītne Galvenā vītne Galvenā vītne Bērna vītne Bērna vītne Galvenā vītne

Iepriekš minētajā kodā es izveidoju klases Runnablethread, kas ievieš Runnable saskarni un nosaka pavediena darbu, ieviešot Runnable saskarnes metodi run (). Tad es izveidoju klases mainthread, kurā ir galvenā metode. Pamatmetodes ietvaros es pasludināju Runnablethread klases palaižamu objektu un nododu šo objektu pavediena konstruktoram, vienlaikus deklarējot pavedienu. Tādā veidā es saistīju pavediena objektu (t) ar palaižamo objektu (rt). Tad pavediena objekts izsauc pavediena sākuma metodi, kas tālāk izsauc klases Runnablethread darbības metodi. Ja es nebūtu saistījis palaižamo objektu ar objektu pavedienu, tad pavedienu sākšanas metode būtu atsaukusies uz pavediena klases palaišanas metodi. Tagad atkal ir divi pavedieni kodā, galvenais pavediens un galvenais pavediens rada bērna pavedienu, un abi tiek izpildīti vienlaikus, bet precīzu izvadi nekad nevar izlikties.

Galvenās atšķirības starp pavedienu un izpildāmu Java

  1. Katrs pavediens, kas izveidots, paplašinot pavedienu klasi, rada tam unikālu objektu un tiek saistīts ar šo objektu. No otras puses, katram pavedienam, kas izveidots, ieviešot izpildāmu saskarni, ir vienāds izpildāmās instances piemērs.
  2. Tā kā katrs pavediens ir saistīts ar unikālu objektu, kad tas tiek izveidots, paplašinot pavedienu klasi, ir nepieciešama vairāk atmiņas. No otras puses, katram pavedienam, kas izveidots, ieviešot Runnable interfeisu, ir viena un tā pati objekta telpa, tāpēc tas prasa mazāk atmiņas.
  3. Ja jūs paplašināt pavedienu klasi, tad tālāk, jūs varat mantot jebkuru citu klasi, jo Java neatļauj vairākkārtēju mantojumu, turpretī Runnable ieviešana joprojām nodrošina klasei iespēju mantot jebkuru citu klasi.
  4. Pavedienu klase jāpagarina tikai tad, ja tai ir jāpārspēj vai jāorientējas uz citām pavedienu klases metodēm. Palaižamā saskarne jāievieš tikai tad, ja vēlaties specializēties tikai palaišanas metodē.
  5. Paplašinot pavedienu klasi, tiek ieviesta cieša savienošana, jo pavediena kodu un pavediena darbu satur viena un tā pati klase. No otras puses, ieviešanas izpildāmā saskarne kodā ievieš brīvu savienojumu, jo pavediena kods ir atdalīts no pavedienam piešķirtā darba.

Secinājums:

Thread klases paplašināšanas vietā ir ieteicams ieviest Runnable interfeisu. Tā kā Runnable ieviešana padara jūsu kodu brīvi savienotu, jo pavediena kods atšķiras no klases, kas darbam piešķir pavedienu. Tas prasa mazāk atmiņas, kā arī ļauj klasei mantot jebkuru citu klasi.