Ieteicams, 2024

Redaktora Izvēle

Starpība starp vītnes klasi un runnable interfeisu Java

Vītni var definēt divos veidos. Pirmkārt, paplašinot Thread klasi, kas jau ir ieviesusi Runnable interfeisu. Otrkārt, tieši īstenojot Runnable interfeisu . Kad jūs definējat pavedienu, paplašinot Thread class, jums ir jānovērš palaist () metode Thread klasē. Kad jūs definējat pavedienu, kas ievieš Runnable interfeisu, jums jāīsteno vienīgā Runnable interfeisa metode. Galvenā atšķirība starp Thread un Runnable ir tāda, ka katrs pavediens, kas definēts, paplašinot Thread klasi, rada unikālu objektu un saista ar šo objektu. No otras puses, katram pavedienam, ko nosaka Runnable interfeiss, ir viens un tas pats objekts.

Ļaujiet mums ievērot dažas citas atšķirības starp pavedienu un maināmu ar salīdzinājuma diagrammu, kas parādīta zemāk:

Salīdzinājuma diagramma

Salīdzinājuma pamatsVītneRunnable
PamataKatrs pavediens izveido unikālu objektu un ar to saistās.Vairākiem pavedieniem ir vienādi objekti.
AtmiņaTā kā katrs pavediens rada unikālu objektu, nepieciešams vairāk atmiņas.Tā kā vairākiem pavedieniem ir vienāds objekts, tiek izmantota mazāk atmiņas.
PaplašināšanaJava, vairāki mantojums nav atļauts, tāpēc pēc tam, kad klase paplašina Thread klases, tā nevar paplašināt nevienu citu klasi.Ja klase definē pavedienu, kas īsteno Runnable interfeisu, tai ir iespēja paplašināt vienu klasi.
IzmantotLietotājam ir jāpaplašina pavedienu klase tikai tad, ja tā vēlas ignorēt citas Thread klases metodes.Ja vēlaties tikai specializēties palaist metodi, tad īstenošana ir labāka izvēle.
SavienošanaPaplašinātā vītņu klase ievieš saspringtu savienojumu, jo klasē ir Thread klases kods un arī vītnei piešķirtais darbsRunnable interfeisa ieviešana ievieš vaļīgu savienojumu, jo Thread kods ir atsevišķs pavedienu darbs.

Vītnes klases definīcija

Vītne ir java.lang paketes klase. Vītnes klase paplašina objekta klasi un īsteno Runnable saskarnes. Vītnes klasei ir konstruktori un metodes, lai izveidotu un darbinātu pavedienu. Kad mēs izveidojam vairākus pavedienus, katrs pavediens izveido unikālu objektu un saista to ar šo objektu. Ja izveidojat pavedienu, kas paplašina vītnes klasi, tālāk jūs nevarat paplašināt nevienu citu klasi, jo java neatbalsta vairākus mantojumus. Tātad, jums vajadzētu izvēlēties Thread klases paplašināšanu tikai tad, ja vēlaties arī ignorēt dažas citas Thread klases metodes. Redzēsim piemēru, kā izveidot pavedienu, kas paplašina vītnes klasi.

 / * Vītnes definēšana * / Class Mythread paplašina Thread {/ * darbu ar pavedienu * / publisko tukšumu palaist () {for (int i = 0; i <10; i ++) {System.Out.Println ("Bērnu pavediens" ); }} Klases galvenā tēma {/ * galvenais pavedienu darbs * / publiskā statiskā tukšuma galvenā (String args []) {Mythread mt = new Mythread (); / * galvenais pavediens izveidoja bērnu pavedienu * / mt.start (); par (int i = 0; i <10; i ++) {System.Out.Print ("Main Thread"); }}} / * Izeja * / Galvenā tēma Galvenā tēma Galvenā tēma Galvenā tēma Bērnu pavediens Bērnu pavediens Bērnu pavediens Bērnu pavediens Galvenā tēma Bērnu pavediens Galvenā tēma Galvenā tēma Bērnu temats Bērnu pavediens Galvenā tēma Galvenā tēma Bērnu pavediens Bērnu temats Galvenā tēma 

Iepriekš minētajā kodā es izveidoju Mythread klasi, kas paplašina Thread klasi un ignorē Thread klases palaišanas metodi. Klasē, kurā ir galvenā metode, es izveidoju Mythread klases pavediena objektu (mt) un, izmantojot pavediena objektu, tika izmantota sākuma () metode. Sākuma metode sāk dzijas izpildi un tajā pašā laikā JVM atsaucas uz pavediena palaišanas metodi. Tagad programmā ir divas pavedieni ar vienu galveno pavedienu un otro bērnu pavedienu, ko izveidojis galvenais pavediens. Abu pavedienu izpilde notiek vienlaicīgi, bet precīzu izeju nevar izlikt.

Runnable Interface definīcija

Runnable ir saskarne ar java.lang paketi. Runnable interfeisa ieviešana var definēt pavedienu. Runnable interfeisam ir viena metode (), kuru īsteno klase, kas ievieš Runnable interfeisu. Ja izvēlaties definēt pavedienu, kas ievieš Runnable interfeisu, jums joprojām ir iespēja paplašināt jebkuru citu klasi. Izveidojot vairākus pavedienus, ieviešot Runnable interfeisu, katram pavedienam ir viens un tas pats palaižamais piemērs. ļaujiet mums uzzināt, kā definēt pavedienu, izmantojot Runnable interfeisu.

 / * Vītnes definēšana * / Klases Runnablethread īsteno Runnable {/ * darbu no pavediena * / publiskās tukšuma palaist () {for (int i = 0; i <10; i ++) {System.Out.Println ("Bērnu pavediens" ); }} Klases galvenā tēma {/ * galvenais pavedienu darbs * / publiskā statiskā tukšuma galvenā (String args []) {Mythread rt = new Mythread (); / * galvenais pavediens izveidoja ritējamu objektu * / Thread t = new Thread (rt); / * galvenais pavediens izveido bērnu pavedienu un izturējis skrējiena objektu * / t.start (); par (int i = 0; i <10; i ++) {System.Out.Print ("Main Thread"); }}} / * Izeja * / Galvenā tēma Galvenā tēma Galvenā tēma Galvenā tēma Bērnu pavediens Bērnu pavediens Bērnu pavediens Bērnu pavediens Galvenā tēma Bērnu pavediens Galvenā tēma Galvenā tēma Bērnu temats Bērnu pavediens Galvenā tēma Galvenā tēma Bērnu pavediens Bērnu temats Galvenā tēma 

Iepriekš minētajā kodā es izveidoju klasi Runnablethread, kas īsteno Runnable interfeisu un definē pavediena darbu, īstenojot Runnable interfeisa palaišanas () metodi. Tad es izveidoju klasi, kas satur galveno metodi. Galvenās metodes ietvaros es paziņoju par Runnablethread klases ritējamu objektu un nodeva šo objektu Thread konstruktoram, deklarējot pavedienu. Tādā veidā es savienoju pavediena objektu (t) ar ritējamu objektu (rt). Tad pavediena objekts ievieš pavediena sākuma metodi, kas turpina izmantot Runnablethread klases palaišanas metodi. Ja es nebūtu saistījis runnable objektu ar Thread objektu, tad pavedienu sākšanas metode būtu izmantojusi Thread klases palaišanas metodi. Tagad, atkal ir divi pavedieni kodu, galvenais pavediens un galvenais pavediens rada bērna pavedienu, kas abi tiek izpildīti vienlaicīgi, bet precīzu izvadi nekad nevar izlikt.

Galvenās atšķirības starp Thread un Runnable Java

  1. Katrs pavediens, kas izveidots, paplašinot Thread klasi, rada tam unikālu objektu un kļūst saistīts ar šo objektu. No otras puses, katram pavedienam, kas izveidots, īstenojot Runnable interfeisu, ir viens un tas pats palaižamais piemērs.
  2. Tā kā katrs pavediens ir saistīts ar unikālu objektu, ja tas tiek izveidots, paplašinot Thread klases, ir nepieciešama lielāka atmiņa. No otras puses, katrs pavediens, kas izveidots, īstenojot Runnable interfeisu, kopīgi izmanto to pašu objekta telpu, tāpēc ir nepieciešams mazāk atmiņas.
  3. Ja jūs turpināt paplašināt Thread klasi, tad varat pārmantot jebkuru citu klasi, jo Java neļauj veikt vairākus mantojumus, bet Runnable ieviešana joprojām dod iespēju klasei mantot jebkuru citu klasi.
  4. Vītnes klasei ir jāpaplašina tikai tad, ja tai ir jāatceļ vai jāpadara specializētas citas Thread klases metodes. Ja vēlaties tikai specializēties palaišanas metodē, jāievieš Runnable interfeiss.
  5. Thread klases paplašināšana ievieš koda saspringto savienojumu, jo Thread kods un vītnes darbs atrodas tajā pašā klasē. No otras puses, īstenojamās saskarnes interfeiss ievada koda sakabinātu savienojumu, jo Thread kods ir noņemts no pavedienam piešķirtā darba.

Secinājums:

Vītnes klases paplašināšanas vietā ir vēlams ieviest Runnable interfeisu. Runnable ieviešana padara jūsu kodu brīvi savienotu, jo pavediena kods atšķiras no klases, kas piešķir darbu pavedienam. Tas prasa mazāku atmiņu un arī ļauj klasei mantot jebkuru citu klasi.

Top