Erinevus lõimiklassi ja Java-liidese vahel

Autor: Laura McKinney
Loomise Kuupäev: 1 Aprill 2021
Värskenduse Kuupäev: 14 Mai 2024
Anonim
Erinevus lõimiklassi ja Java-liidese vahel - Tehnoloogia
Erinevus lõimiklassi ja Java-liidese vahel - Tehnoloogia

Sisu


Lõime saab määratleda kahel viisil. Esiteks poolt niidiklassi laiendamine mis on juba käivitatava liidese rakendanud. Teiseks, otse käivitatava liidese rakendamine. Keerme klassi laiendamise abil lõime määratlemisel peate alustama niidiklassi käitamismeetodi (). Runnable-liidese rakendava lõime määratlemisel peate rakendama Runnable-liidese ainsa run () -meetodi. Põhiline erinevus lõime ja käitatava vahel on see, et iga niidiklassi laiendades määratletud niit loob kordumatu objekti ja saab selle objektiga seostatud. Teisest küljest jagab iga Runnable-liidese abil määratletud niit sama objekti.

Vaatleme allpool toodud võrdlusdiagrammi abil mõnda muud lõime ja käitatava erinevust:

  1. Võrdlusdiagramm
  2. Definitsioon
  3. Peamised erinevused
  4. Järeldus

Võrdlusdiagramm

Võrdluse alusNiitJuhitav
PõhilineIga niit loob kordumatu objekti ja seotakse sellega.Mitu lõime jagavad samu objekte.
Mälu Kuna iga niit loob unikaalse objekti, on vaja rohkem mälu.Kuna mitu lõime jagavad sama objekti, kasutatakse vähem mälu.
PikendadesJava-s ei ole mitmekordne pärimine lubatud, seega ei saa see pärast klassi laiendamist niidiklassi laiendada ühtegi teist klassi.Kui klass määratleb niidi käivitatava liidese, on tal võimalus ühte klassi laiendada.
Kasutage Kasutaja peab niidiklassi laiendama ainult siis, kui ta soovib keeruklassi teisi meetodeid alistada.Kui soovite spetsialiseeruda ainult käitamismeetodile, on parem variant Runnable rakendamine.
Sidumine Niitide laiendamine tutvustab tihedat sidumist, kuna klass sisaldab lõime klassi koodi ja ka lõimele määratud töödRunnable-liidese juurutamine loob lahtise sidumise, kuna niidi kood on lõimede tööst eraldi.


Niitklassi määratlus

Niit on klass sees java.lang pakett. Niidiklass laieneb Objekt klassi ja see rakendab Juhitav liidesed. Niitklassil on konstruktorid ja meetodid lõime loomiseks ja selle opereerimiseks. Kui loome mitu lõime, loob iga teema ainulaadse objekti ja seostub selle objektiga. Kui loote lõime laiendava lõimeklassi, ei saa te enam ühtegi teist klassi laiendada, kuna java ei toeta mitut pärimist. Niisiis, te peaksite niidiklassi laiendama ainult siis, kui soovite ka mõnda muud lõimeklassi meetodit alistada. Vaatame näidet lõimeklassi laiendava lõime loomiseks.

/ * Lõime määratlemine * / Klassi mythread laiendab lõime {/ * lõime tööd * / public void run () {jaoks (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread") ); }} Klass mainThread {/ * põhilõnga ülesanne * / avalik staatiline tühine pea (stringid) {Mythread mt = new Mythread (); / * põhilõng lõi alakeerme * / mt.start (); jaoks (int i = 0; i <10; i ++) {System.Out. ("Main Thread"); }}} / * Väljund * / Põhilõng Põhilõng Põhilõng Põhilõng Lastekrõng Lastekrõngas Lasteke lapsõmblemine Lõnglõng Põhilõng Lastekrõnga põhilõik Põhilõige Lasteke lapsekere põhiteema Põhilõng Põhilõime põhiteema Lapselõng Lapselõng põhilõng

Ülalolevas koodis loon klassi Mythread, mis laiendab niidiklassi ja alistab lõimeklassi käitamismeetodi. Põhimeetodit sisaldavas klassis loon Mythread klassi lõimeobjekti (mt) ja lõimeobjekti kasutades käivitati algus () meetod. Stardimeetod käivitab lõime täitmise ja samal ajal kutsub JVM esile lõime käitamismeetodi. Nüüd on programmis kaks lõime, üks põhilõng ja teine ​​põhilõnga loodud lõim. Mõlema lõime käivitamine toimub üheaegselt, kuid täpset väljundit ei saa teeselda.


Käitatava liidese määratlus

Juhitav on kasutajaliides java.lang pakett. Käivitatava liidese rakendamisel saame lõime määratleda. Käitatavas liideses on üks meetod jooks (), mida rakendab klass, mis juhib käitatavat liidest. Kui valite käitatava liidese rakendava lõime määratlemise, saate ikkagi laiendada mõnda muud klassi. Kui loote käivitatava liidese abil mitu lõime, jagavad kõik lõimed sama käitatavat esinemisjuhtu. andke meile teada, kuidas lõime määratleda Runnable-liidese abil.

/ * Lõime määratlemine * / Klass Runnablethread rakendab käivitatavat {/ * lõime ülesannet * / public void run () {jaoks (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread") ); }} Klass mainThread {/ * põhilõnga ülesanne * / avalik staatiline tühine pea (keelpillid) {Mythread rt = new Mythread (); / * põhilõng lõi käivitatava objekti * / niit t = uus niit (rt); / * põhilõng loob alampoolse lõime ja läbis käivitatava objekti * / t.start (); jaoks (int i = 0; i <10; i ++) {System.Out. ("Main Thread"); }}} / * Väljund * / Põhilõng Põhilõng Põhilõng Põhilõng Lastekrõng Lastekrõngas Lasteke lapsõmblemine Lõnglõng Põhilõng Lastekrõnga põhilõik Põhilõige Lasteke lapsekere põhiteema Põhilõng Põhilõime põhiteema Lapselõng Lapselõng põhilõng

Ülalolevas koodis lõin klassi Runnablethread, mis rakendab Runnable liidest ja määratleb lõime töö, rakendades Runnable liidese run () meetodit. Seejärel loon klassimeistrilõigu, mis sisaldab põhimeetodit. Põhimeetodi sees kuulutasin klassi Runnablethread käitatavaks objektiks ja edastasin selle lõime kuulutades lõime konstruktorile. Sel viisil seostasin lõimeobjekti (t) käivitatava objektiga (rt). Seejärel kutsub lõimeobjekt lõime käivitamismeetodi, mis lisaks käivitab klassi Runnablethread käitamismeetodi. Kui ma poleks käitatavat objekti lõimeobjektiga sidunud, oleks lõimede algusmeetod kutsunud esile lõimeklassi käitamismeetodi. Koodis on jällegi kaks lõime, nii põhilõng kui ka põhilõng loovad alampoolse lõime mõlemad samaaegselt, kuid täpset väljundit ei saa kunagi teeselda.

Keerme ja Java käitamisvõimaluse peamised erinevused

  1. Iga lõime, mis on loodud lõime klassi laiendamisel, loob selle jaoks ainulaadse objekti ja saab selle objektiga seostada. Teisest küljest on kõik käivitatava liidese rakendamisel loodud niidid sama käitatava eksemplariga.
  2. Kuna niidiklassi laiendamise teel on iga lõim seotud unikaalse objektiga, on vaja rohkem mälu. Teisest küljest jagab iga Runnable-liidese loomisega loodud niit sama objektiruumi, seega nõuab see vähem mälu.
  3. Kui laiendate niidiklassi veelgi, saate pärida mis tahes teise klassi, kuna Java ei võimalda mitut pärimist, samas kui Runnable'i rakendamine annab klassile siiski võimaluse pärida mõnda teist klassi.
  4. Keeruklassi tuleb laiendada ainult siis, kui see peab alistama mõne keeruklassi meetodi või spetsialiseeruma sellele. Kui soovite spetsialiseeruda ainult käitamismeetodile, peate installima käitatava liidese.
  5. Keerme klassi laiendamine toob kaasa koodi tiheda sidumise, kuna niidi kood ja niidi töö on samas klassis. Teisalt tutvustab käivitatav liidestatav liides koodi lahtist sidumist, kuna niidi kood on lõimele eraldatud tööst lahus.

Järeldus:

Keeruklassi laiendamise asemel on eelistatav rakendada käivitatav liides. Kuna käivitatav Runnable muudab teie koodi lõdvalt sidestatuks, kuna niidi kood erineb klassist, mis määrab lõimele töö. See nõuab vähem mälu ja võimaldab klassil pärida ka ükskõik millist teist klassi.