Soovitatav, 2024

Toimetaja Valik

Teema klassi ja jooksva liidese erinevus Java-s

Teemat saab määratleda kahel viisil. Esiteks, laiendades Thread klassi, mis on juba rakendanud Runnable liidese. Teiseks, rakendades vahetult Runnable liidest . Kui defineerite lõime, lisades Thread-klassi, peate tühistama Thread-klassi käivitamismeetodi. Kui määrate jooksva liidese teostamise lõime, peate rakendama Runnable liidese ainsa käigu () meetodit. Põhiline erinevus lõime ja käiguvahetuse vahel on see, et iga lõime, mis on määratud Thread-klassi laiendamisega, loob unikaalse objekti ja seostub selle objektiga. Teisest küljest jagab iga jooksva liidese rakendamisega määratud lõng sama objekti.

Jälgime allpool toodud võrdluskaardi abil muid erinevusi lõime ja käiguvahetusega:

Võrdluskaart

Võrdluse alusTeemaKäitatav
PõhilineIga lõng loob unikaalse objekti ja sellega seostub.Mitmel teemal on samad objektid.
MäluKuna iga lõime loob unikaalse objekti, on vaja rohkem mälu.Kuna mitu teemat jagavad sama objekti, kasutatakse vähem mälu.
LaiendamineJava-is ei lubata mitmekordset pärandit, mistõttu pärast klassi Thread-klassi laiendamist ei saa see laiendada ühtegi teist klassi.Kui klass määratleb niidi, mis rakendab Runnable liidest, on tal võimalus laiendada ühte klassi.
KasutageKasutaja peab laiendama lõnga klassi ainult siis, kui ta soovib teiste keermete klassi meetodite tühistada.Kui soovid spetsialiseeruda ainult jooksmismeetodile, siis on rakenduse Runnable rakendamine parem valik.
ÜhendamineKeermeklassi laiendamine toob kaasa tiheda haakeseadise, kuna klass sisaldab Thread-klassi koodi ja ka niidile määratud töödRunnable'i liidese rakendamine toob sisse lahtise haakeseadise, kuna Threadi kood on Threads'i tööst eraldi.

Keermeklassi määratlus

Teema on java.lang paketi klass. Thread-klass laiendab objekti klassi ja rakendab Runnable liidesed. Teema klassil on konstruktorid ja meetodid niidi loomiseks ja töötamiseks. Mitme niidi loomisel loob iga niit ainulaadse objekti ja seostub selle objektiga. Kui loote lõime, mis pikendab lõime klassi, ei saa te veel teist klassi laiendada, kuna java ei toeta mitmekordset pärimist. Niisiis, peaksite valima Threadi klassi pikendamise ainult siis, kui soovite ka mõne muu Thread-klassi meetodi tühistada. Vaatame näite niidi loomise kohta, mis laiendab lõimeklassi.

 / * Keerme määratlemine * / klassi müütja laiendab lõime {/ * töö niit * / avalik tühimik () {for (int i = 0; i <10; i ++) {System.Out.Println ("lapse lõime" ); }} Klasside peamine lugu {/ * peateema töö * / avalik staatiline tühimik peamine (String args []) {müütide mt = uus müüt) (); / * peakeel lõi lapse lõime * / mt.start (); (int i = 0; i <10; i ++) {System.Out.Print ("Main Thread"); }}} / * Väljund * / Peateema Peamine lõime Peateema Lapse lõime Lapse lõim Laps Lõng Lapse lõime Peamine teema Laps Lõng Põhiline lõime Peamine teema Laps Teema Lapse lõime Peamine lõime Peateema Laps Teema Lapse lõime Peateema Laps Teema Lapse lõim 

Ülaltoodud koodis loome klassi Mythread, mis laiendab Thread klassi ja tühistab Thread-klassi käivitamismeetodi. Põhimeetodit sisaldavas klassis loome Mythread-klassi lõimeobjekti (mt) ja keermesobjekti kasutamisega käivitati algus- () meetod. Alustamismeetod alustab niidi täitmist ja samal ajal käivitab JVM lõime käivitamismeetodi. Nüüd on programmis kaks lõnga ühte põhikeelt ja peamist lõnga loodud teine ​​lapsniit. Mõlema niidi täitmine toimub samaaegselt, kuid täpse väljundi ei saa teeselda.

Jooksva liidese määratlus

Käivitatav on java.lang paketi liides. Runnable liidese rakendamine võimaldab määrata lõime. Käivitataval liidesel on üks meetod (), mida rakendab Runnable liidest rakendav klass. Kui otsustate määrata lõimiku, mis rakendab jooksvat liidest, on teil veel võimalus laiendada mõnda teist klassi. Kui loote Runnable liidese abil mitu niidit, jagab iga lõime sama jooksvat eksemplari. Õppige, kuidas määrata niit Runnable liidese abil.

 / * Keerme määramine * / Klass Runnablethread rakendab niidi * / avaliku void run () {/ * töö (/ i i = 0; i <10; i ++) {System.Out.Println ("Lapsniit" ); }} Klasside peamine lugu {/ * peateema töö * / avalik staatiline tühimik peamine (String args []) {müütiliba rt = uus müütlõng (); / * peakeel lõi jooksva objekti * / Teema t = uus teema (rt); / * peakeel loob lapse lõime ja läbib jooksva objekti * / t.start (); (int i = 0; i <10; i ++) {System.Out.Print ("Main Thread"); }}} / * Väljund * / Peateema Peamine lõime Peateema Lapse lõime Lapse lõim Laps Lõng Lapse lõime Peamine teema Laps Lõng Põhiline lõime Peamine teema Laps Teema Lapse lõime Peamine lõime Peateema Laps Teema Lapse lõime Peateema Laps Teema Lapse lõim 

Ülaltoodud koodis lõin Runnablethreadi, mis rakendab Runnable liidest ja määrab lõime töö Runnable liidese käivitamismeetodi abil. Siis ma loome klassi, mis sisaldab peamist meetodit. Põhimeetodi sees kuulutasin klassi Runnablethread runnable objekti ja andsin selle objekti Threadi konstruktorile, andes samal ajal niidi välja. Sel viisil ühendasin lõimeobjekti (t) jooksva objektiga (rt). Seejärel käivitab keermesobjekt niidi käivitamismeetodit, mis kutsub edasi Runnablethreadi klassi käivitamismeetodit. Kui ma ei oleks runnable objekti Thread-objektiga seotud, oleks keermete algusmeetod kasutanud Thread-klassi käivitamismeetodit. Nüüd on koodis veel kaks lõnga, põhikeel ja põhikiud loovad lapse lõime, mida mõlemad saavad teostada samaaegselt, kuid täpset väljundit ei saa kunagi ette kujutada.

Keerme ja jooksva käigu peamised erinevused Java

  1. Iga lõime, mis on loodud lõimeklassi laiendamisega, loob sellele unikaalse objekti ja seostub selle objektiga. Teisest küljest jagavad iga jooksva liidese rakendamisega loodud lõng sama jooksvat eksemplari.
  2. Kuna iga niit on seotud ainulaadse objektiga, kui see luuakse lõimeklassi laiendamisega, on vaja rohkem mälu. Teisest küljest, iga niit, mis on loodud Runnable liidese rakendamisel, jagab seega sama objekti ruumi, nõuab vähem mälu.
  3. Kui pikendate seejärel lõimeklassi, siis saate pärida mis tahes teise klassi, kuna Java ei võimalda mitmekordset pärimist, samas kui Runnable'i rakendamine annab veel klassile võimaluse mõnele teisele klassile pärida.
  4. Keermeklassi peab laiendama ainult siis, kui ta peab mõne muu Thread-klassi meetodi üle võtma või spetsialiseeruma. Kui soovite ainult spetsialiseerunud sõidumenetlust, peate rakendama Runnable liidese.
  5. Thread-klassi laiendamine toob koodis sisse tiheda haakeseadise, kuna keerme kood ja niiditöö on sama klassi poolt. Teisest küljest, rakenduse Runnable liideses on koodis lahtine ühendus, kuna niidile määratud tööst lähtub Threadi kood.

Järeldus:

Thread-klassi pikendamise asemel on eelistatud rakendada jooksvat liidest. Kuna rakenduse Runnable kasutamine muudab teie koodi lõdvalt, kuna niidikood erineb klassist, mis annab tööle lõime. See nõuab vähem mälu ja võimaldab ka klassil mõnda teist klassi pärida.

Top