Rekomenduojama, 2024

Redaktoriaus Pasirinkimas

Skirtumas tarp sriegio klasės ir „Runnable“ sąsajos „Java“

Gija gali būti apibrėžta dviem būdais. Pirma, išplečiant „Thread“ klasę, kuri jau įdiegė „Runnable“ sąsają. Antra, tiesiogiai įgyvendinant „Runnable“ sąsają . Apibrėžiant sriegį, plečiant „Thread“ klasę, turite panaikinti „Thread class“ (paleisti) metodą. Apibrėžiant sriegį, įgyvendinantį „Runnable“ sąsają, turite įgyvendinti vienintelį „Runnable“ sąsajos metodą. Pagrindinis skirtumas tarp „Thread“ ir „Runnable“ yra tas, kad kiekvienas sriegis, apibrėžtas pratęsiant „Thread class“, sukuria unikalų objektą ir susieja su tuo objektu. Kita vertus, kiekvienas sriegis, apibrėžtas įgyvendinant Runnable sąsają, dalijasi tuo pačiu objektu.

Atkreipkime dėmesį į kai kuriuos kitus skirtumus tarp siūlų ir bėgančiųjų su žemiau pateikta palyginimo diagrama:

Palyginimo diagrama

Palyginimo pagrindasSiūlaiPaleidžiamas
PagrindinisKiekviena gija sukuria unikalų objektą ir su juo susieja.Keli siūlai dalijasi tais pačiais objektais.
AtmintisKadangi kiekviena gija sukuria unikalų objektą, reikia daugiau atminties.Kadangi keli siūlai turi tą patį objektą, naudojama mažiau atminties.
Pratęsimas„Java“ daugkartinis paveldėjimas neleidžiamas, todėl, kai klasė pratęsia temą, ji negali išplėsti jokios kitos klasės.Jei klasė apibrėžia siūlomą sąsają, ji turi galimybę išplėsti vieną klasę.
NaudokiteNaudotojas turi išplėsti siūlų klasę tik tuo atveju, jei jis nori panaikinti kitus temos klasės metodus.Jei norite tik specializuoti paleisti metodą, tuomet įgyvendinimas „Runnable“ yra geresnis pasirinkimas.
SukabinimasPlėtros sriegio klasė pristato griežtą sukabinimą, nes klasėje yra Thread klasės kodas ir užduočiai priskirti darbaiĮdiegus „Runnable“ sąsają įvedamas laisvas sujungimas, nes „Thread“ kodas yra atskiras „Threads“ darbas.

Sriegio klasės apibrėžimas

Siūlai yra java.lang paketo klasė. „Thread“ klasė išplečia Objektų klasę ir įgyvendina „ Runnable“ sąsajas. Sriegių klasėje yra konstruktorių ir metodų, skirtų sriegiui sukurti ir veikti. Kai mes sukuriame keletą sričių, kiekvienas gija sukuria unikalų objektą ir susieja su tuo objektu. Jei sukuriate temą, pratęsiantį temos klasę, toliau jūs negalite išplėsti jokios kitos klasės, nes java nepalaiko keleto paveldėjimo. Taigi, turėtumėte pasirinkti išplėsti temos klasę tik tada, kai taip pat norite panaikinti kai kuriuos kitus Temos klasės metodus. Pažiūrėkime, kaip sukurti temą, pratęsiantį temos klasę.

 / * Sriegio apibrėžimas * / Klasės mitas išplečia sriegio {/ * užduoties * / viešosios tuščiosios eigos () {for (int i = 0; i <10; i ++) {System.Out.Println („Vaiko gija“ ); }} Klasės pagrindinės temos {/ * darbas su pagrindiniu sriegiu * / viešoji statinė negaliojančia (String args []) {Mythread mt = new Mythread (); / * pagrindinis siūlelis sukūrė vaiko siūlą * / mt.start (); už (int i = 0; i <10; i ++) {System.Out.Print ("Pagrindinė gija"); }}} / * Išėjimas * / Pagrindinė tema Pagrindinė tema Pagrindinė tema Pagrindinė tema Vaiko temos vaikas Temos vaikas Sriegis Vaiko siūlai Pagrindinis temas Vaikas Temas Pagrindinė tema Pagrindinė tema Vaikas Temas Vaikas Temas Pagrindinė tema Pagrindinė tema Vaikas Temas Vaikų temos Pagrindinė tema 

Pirmiau pateiktame kode sukuriu „Mythread“ klasę, kuri išplečia „Thread“ klasę ir nepaiso „Thread“ klasės veikimo metodo. Klasėje, kurioje yra pagrindinis metodas, aš sukuriu Mythread klasės siūlų objektą (mt) ir naudojant sriegio objektą naudojamas pradinis () metodas. Pradžios metodas pradeda gijų vykdymą ir tuo pačiu metu JVM inicijuoja pokalbio metodą. Dabar programoje yra du siūlai, vienas pagrindinis sriegis ir antrasis vaikų siūlas, sukurtas pagrindinio gijos. Abiejų sriegių vykdymas vyksta vienu metu, tačiau tikslios išvesties negalima apsimesti.

Paleidžiamos sąsajos apibrėžimas

„Runnable“ yra „ java.lang“ paketo sąsaja. Įdiegus sąsają, galime nustatyti giją. Paleidžiama sąsaja turi vieną metodą (), kurį įgyvendina klasė, įgyvendinanti „Runnable“ sąsają. Kai pasirenkate apibrėžti sriegį, kuriame įdiegta „Runnable“ sąsaja, jūs vis dar turite galimybę išplėsti bet kurią kitą klasę. Kai sukuriate kelias temas diegdami „Runnable“ sąsają, kiekvienas sriegis turi tą patį paleistiną egzempliorių. leiskite mums sužinoti, kaip apibrėžti siūlą naudojant „Runnable“ sąsają.

 / * Sriegio apibrėžimas * / Klasė Runnablethread įgyvendina „Runnable“ {/ * užduoties * / viešosios tuščiosios eigos () {) (už (int i = 0; i <10; i ++) {System.Out.Println („Vaiko temos“) ); }} Klasės pagrindinės temos {/ * darbas su pagrindiniu sriegiu * / viešoji statinė negaliojančia pagrindinė (String args []) {Mythread rt = new Mythread (); / * pagrindinė gija sukūrė paleistiną objektą * / Thread t = new Thread (rt); / * pagrindinis siūlas sukuria vaiko siūlą ir išlaikė paleistiną objektą * / t.start (); už (int i = 0; i <10; i ++) {System.Out.Print ("Pagrindinė gija"); }}} / * Išėjimas * / Pagrindinė tema Pagrindinė tema Pagrindinė tema Pagrindinė tema Vaiko temos vaikas Temos vaikas Sriegis Vaiko siūlai Pagrindinis temas Vaikas Temas Pagrindinė tema Pagrindinė tema Vaikas Temas Vaikas Temas Pagrindinė tema Pagrindinė tema Vaikas Temas Vaikų temos Pagrindinė tema 

Pirmiau pateiktame kode sukūriau Runnablethread klasę, kuri įgyvendina „Runnable“ sąsają ir apibrėžia siūlų užduotį, įgyvendindama „Runnable“ sąsajos paleisties () metodą. Tada aš sukuriu klasę, kurioje yra pagrindinis metodas. Pagrindinio metodo viduje paskelbiau „Runnablethread“ klasės bėgantįjį objektą ir perduodamas šį objektą „Thread“ konstruktoriui, paskelbdamas giją. Tokiu būdu, aš susiejau siūlų objektą (t) su bėgimo objektu (rt). Tuomet sriegio objektas inicijuoja siūlų pradžios metodą, kuris toliau skatina Runnablethread klasės veikimo metodą. Jei aš nebuvau susietas objektas su „Thread“ objektu, tada siūlų pradžios metodas būtų panaudojęs „Thread“ klasės veikimo metodą. Dabar vėl yra du kodai, pagrindiniai siūlai ir pagrindiniai siūlai sukuria vaiko siūlus, kurie abu pasiekiami vienu metu, tačiau tikslios išvesties niekada negalima apsimesti.

Pagrindiniai skirtumai tarp „Thread“ ir „Runnable“ Java

  1. Kiekvienas sriegis, sukurtas pratęsiant „Thread“ klasę, sukuria jam unikalų objektą ir susietas su tuo objektu. Kita vertus, kiekvienas sriegis, sukurtas įgyvendinant „Runnable“ sąsają, turi tą patį paleistiną pavyzdį.
  2. Kadangi kiekvienas sriegis yra susietas su unikaliu objektu, kai jis sukuriamas plečiant „Thread class“, reikia daugiau atminties. Kita vertus, kiekvienas sriegis, sukurtas įgyvendinant „Runnable“ sąsają, dalijasi ta pačia objekto vieta, todėl reikia mažiau atminties.
  3. Jei išplėsite temos klasę ir toliau, galite paveldėti bet kurią kitą klasę, nes „Java“ neleidžia kelis paveldėjimus, o įgyvendinimas „Runnable“ vis dar suteikia galimybę klasei paveldėti bet kurią kitą klasę.
  4. Sriegių klasę reikia išplėsti tik tada, jei ji turi panaikinti arba specializuoti kai kuriuos kitus Thread klasės metodus. Jei norite tik specializuoti paleidimo metodą, turite įdiegti „Runnable“ sąsają.
  5. Plečiant „Thread“ klasę, kodą sukaupia glaudi jungtis, nes siūlų kodas ir siūlų užduotis yra toje pačioje klasėje. Kita vertus, „Runnable“ sąsaja įveda kodą nesupakuotu būdu, nes „Thread“ kodas yra išreikštas iš užduočiai priskirtų užduočių.

Išvada:

Pageidautina, kad vietoj „Sriegių“ klasės išplėtimo būtų įdiegta „Runnable“ sąsaja. Įgyvendinant „Runnable“, jūsų kodas yra laisvai sujungtas, nes siūlų kodas skiriasi nuo klasės, kuriai užduotis skiriama. Ji reikalauja mažiau atminties ir taip pat leidžia klasei paveldėti bet kurią kitą klasę.

Top