Skirtumas tarp „Thread Class“ ir „Java“ sąsajų

Autorius: Laura McKinney
Kūrybos Data: 1 Balandis 2021
Atnaujinimo Data: 9 Gegužė 2024
Anonim
Java Multithreading : AtomicReference, ScheduledExecutorService и монада Either. Многопоточность.
Video.: Java Multithreading : AtomicReference, ScheduledExecutorService и монада Either. Многопоточность.

Turinys


Gija gali būti apibrėžta dviem būdais. Pirmiausia pratęsdami „Thread“ klasę kuri jau įdiegė paleidžiamą sąsają. Antra, tiesiogiai įgyvendinant paleidžiamą sąsają. Apibrėždami siūlą, praplečiant „Thread“ klasę, turite nepaisyti „run ()“ metodo „Thread“ klasėje. Apibrėždami giją, įgyvendinančią „Runnable“ sąsają, turite įdiegti vienintelį „Runnable“ sąsajos „run ()“ metodą. Pagrindinis skirtumas tarp sriegio ir paleidžiamo yra tas, kad kiekviena gija, apibrėžta pratęsiant sriegio klasę, sukuria unikalų objektą ir susiejama su tuo objektu. Kita vertus, kiekviena gija, apibrėžta įgyvendinant „Runnable“ sąsają, turi tą patį objektą.

Stebėkime keletą kitų skirtumų tarp „Thread“ ir „Runnable“, naudodamiesi žemiau pateikta palyginimo lentele:

  1. Palyginimo diagrama
  2. Apibrėžimas
  3. Pagrindiniai skirtumai
  4. Išvada

Palyginimo diagrama

Palyginimo pagrindasSiūlasPaleidžiama
PagrindinisKiekviena gija sukuria unikalų objektą ir yra su juo susieta.Keli siūlai turi tuos pačius objektus.
Atmintis Kadangi kiekviena gija sukuria unikalų objektą, reikia daugiau atminties.Kadangi kelios gijos turi tą patį objektą, naudojama mažiau atminties.
Prailginimas„Java“ sistemoje daugkartinis palikimas neleidžiamas, todėl po klasės išplėtimo „Thread“ klasė negali pratęsti jokios kitos klasės.Jei klasė apibrėžia giją, įgyvendinančią paleidžiamą sąsają, ji turi galimybę pratęsti vieną klasę.
Naudokite Vartotojas turi pratęsti gijų klasę tik tuo atveju, jei nori nepaisyti kitų gijų klasės metodų.Jei norite tik specializuotis paleidimo metodu, tada geriau įgyvendinti Runnable.
Sukabinimas Pratęsdama temos klasę, įvedamas griežtas sujungimas, nes klasėje yra sriegio klasės kodas ir srijai priskirta užduotisĮdiegiant „Runnable“ sąsają pristatomas laisvas sujungimas, nes sriegio kodas yra atskiras iš gijų darbo.


Siūlo klasės apibrėžimas

Siūlas yra klasė java.langas pakuotė. Temų klasė tęsiasi Objektas klasė, ir tai įgyvendina Paleidžiama sąsajos. „Thread“ klasėje yra konstruktoriai ir metodai, skirti sukurti ir valdyti siūlą. Kai mes sukuriame keletą gijų, kiekviena gija sukuria unikalų objektą ir susiejama su tuo objektu. Jei sukursite giją pratęsiančią gijų klasę, toliau pratęsti negalėsite, nes „Java“ nepalaiko kelių paveldėjimų. Taigi, jūs turėtumėte pasirinkti išplėsti temos klasę tik tada, kai taip pat norite nepaisyti kai kurių kitų temų klasės metodų. Pažiūrėkime sriegio, praplečiančio gijų klasę, kūrimo pavyzdį.

/ * Gijos apibrėžimas * / Class Mythread pratęsia giją {/ * gijos užduotis * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread") ); }} Kursas „mainThread“ {/ * pagrindinio sriegio darbas * / viešas statinis negaliojantis pagrindinis (stygos) {Mythread mt = new Mythread (); / * pagrindinis sriegis sukūrė vaikišką giją * / mt.start (); for (int i = 0; i <10; i ++) {System.Out. ("Pagrindinė gija"); }}} / * Išvestis * / Pagrindinė gija Pagrindinė gija Pagrindinė gija Pagrindinė gija Vaikų gija Vaikų gija Vaikų gija Vaikų gija Vaikų gija Pagrindinė gija Vaikų gija Pagrindinė gija Pagrindinė gija Vaikų gija Vaikų gija Pagrindinė gija Pagrindinė gija Pagrindinė gija Vaikų gija Vaikų gija Pagrindinė tema

Aukščiau esančiame kode sukuriu „Mythread“ klasę, kuri praplečia „Thread“ klasę ir nepaiso „Thread“ klasės vykdymo metodo. Klasėje, kurioje yra pagrindinis metodas, sukuriu „Mythread“ klasės gijų objektą (mt) ir, naudodamas sriegio objektą, iššaukiu pradžios () metodą. Paleidimo metodas pradeda gijos vykdymą ir tuo pačiu metu JVM iškviečia gijos vykdymo metodą. Dabar programoje yra du sriegiai - vienas pagrindinis ir antras pagrindiniai sriegiai. Abiejų gijų vykdymas vyksta tuo pačiu metu, tačiau negalima apsimesti tikslia išvestimi.


Paleidžiamos sąsajos apibrėžimas

Paleidžiama yra sąsaja java.langas pakuotė. Įdiegdami paleidžiamą sąsają galime apibrėžti giją. Paleidžiama sąsaja turi vieną metodą bėgti (), kurią įgyvendina klasė, įgyvendinanti „Runnable“ sąsają. Kai pasirinksite apibrėžti giją, įgyvendinančią paleidžiamą sąsają, vis tiek turite pasirinkimą išplėsti bet kurią kitą klasę. Kai kuriate keletą gijų įgyvendindami „Runnable“ sąsają, kiekviena gija dalijasi ta pačia paleidžiama instancija. leiskite mums išmokti apibrėžti giją naudojant „Runnable“ sąsają.

/ * Gijos apibrėžimas * / Klasės Runnablethread padargai Runnable {/ * gijos užduotis * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread") ); }} Kursas „mainThread“ {/ * pagrindinio sriegio darbas * / viešas statinis negaliojantis pagrindinis (stygos argos) {Mythread rt = new Mythread (); / * pagrindinis gija sukūrė paleidžiamą objektą * / Gija t = nauja gija (rt); / * pagrindinis sriegis sukuria antrinį sriegį ir praleido paleidžiamą objektą * / t.start (); for (int i = 0; i <10; i ++) {System.Out. ("Pagrindinė gija"); }}} / * Išvestis * / Pagrindinė gija Pagrindinė gija Pagrindinė gija Pagrindinė gija Vaikų gija Vaikų gija Vaikų gija Vaikų gija Vaikų gija Pagrindinė gija Vaikų gija Pagrindinė gija Pagrindinė gija Vaikų gija Vaikų gija Pagrindinė gija Pagrindinė gija Pagrindinė gija Vaikų gija Vaikų gija Pagrindinė tema

Aukščiau esančiame kode aš sukūriau klasės „Runnablethread“, kuri įgyvendina „Runnable“ sąsają ir apibrėžia gijos darbą įgyvendindama „Runnable“ sąsajos „run ()“ metodą. Tada aš sukuriu klasikinį „devynių klasių“ pagrindinį metodą. Taikydamas pagrindinį metodą, paskelbiau, kad „Runnablethread“ klasės objektas yra tinkamas naudoti, ir perduodavau šį objektą „Thread“ konstruktoriui deklaruodamas siūlą. Tokiu būdu aš susiejau sriegio objektą (t) su paleidžiamu objektu (rt). Tada sriegio objektas iškviečia sriegio pradžios metodą, kuris toliau iškviečia Runnablethread klasės vykdymo metodą. Jei nebūčiau susiejęs paleidžiamo objekto su „Thread“ objektu, tada gijų pradžios metodas būtų pateikęs „Thread“ klasės vykdymo metodą. Kode vėl yra dvi gijos: pagrindinis ir pagrindinis sriegis sukuria vaiko giją, kurios vykdomos vienu metu, tačiau tikslaus išėjimo niekada negalima apsimesti.

Pagrindiniai skirtumai tarp gijos ir paleidžiamos Java

  1. Kiekviena gija, sukurta praplečiant temų klasę, sukuria jai unikalų objektą ir susiejama su tuo objektu. Kita vertus, kiekviena gija, sukurta įgyvendinant „Runnable“ sąsają, turi tą pačią vykdomą instanciją.
  2. Kadangi kiekviena gija yra susieta su unikaliu objektu, kai ji sukuriama praplečiant gijų klasę, reikia daugiau atminties. Kita vertus, kiekviena gija, sukurta įgyvendinant „Runnable“ sąsają, naudojasi ta pačia objekto erdve, taigi jai reikia mažiau atminties.
  3. Jei pratęsite temos klasę toliau, galite paveldėti bet kurią kitą klasę, nes „Java“ neleidžia paveldėti daug kartų, tuo tarpu „Runnable“ įdiegimas vis tiek suteikia galimybę klasei paveldėti bet kurią kitą klasę.
  4. Temų klasę reikia pratęsti tik tuo atveju, jei ji turi nepaisyti ar specializuotis kai kuriais kitais gijų klasės metodais. Turite įdiegti paleidžiamą sąsają, jei norite tik specializuotis tik paleidimo metodu.
  5. Pratęsus temos klasę, įvedamas glaudus kodo susiejimas, nes sriegio kodas ir sriegio darbas yra toje pačioje klasėje. Kita vertus, įgyvendinant „Runnable“ sąsaja įvedamas laisvas sujungimas, nes sriegio kodas skiriasi nuo srijai priskirtos užduoties.

Išvada:

Pageidautina įdiegti „Runnable“ sąsają, o ne išplėsti „Thread“ klasę. Įdiegus „Runnable“ jūsų kodas tampa laisvai susietas, nes gijos kodas skiriasi nuo klasės, kuriai priskiriama užduotis. Tai reikalauja mažiau atminties ir leidžia klasei paveldėti bet kurią kitą klasę.