Forskel mellem trådklasse og kørbart interface i Java

Forfatter: Laura McKinney
Oprettelsesdato: 1 April 2021
Opdateringsdato: 14 Kan 2024
Anonim
Forskel mellem trådklasse og kørbart interface i Java - Teknologi
Forskel mellem trådklasse og kørbart interface i Java - Teknologi

Indhold


En tråd kan defineres på to måder. Først af udvidelse af en trådklasse der allerede har implementeret en Runnable interface. For det andet ved direkte implementering af et Runnable interface. Når du definerer en tråd ved at udvide trådklassen, skal du tilsidesætte metoden kør () i trådklassen. Når du definerer en tråd, der implementerer en Runnable interface, skal du implementere den eneste run () -metode til Runnable interface. Den grundlæggende forskel mellem tråd og kørsel er, at hver tråd defineret ved at udvide trådklassen opretter et unikt objekt og blive tilknyttet dette objekt. På den anden side deler hver tråd defineret ved implementering af Runnable interface det samme objekt.

Lad os se nogle andre forskelle mellem tråd og kørsel ved hjælp af sammenligningstabellen vist nedenfor:

  1. Sammenligningstabel
  2. Definition
  3. Vigtige forskelle
  4. Konklusion

Sammenligningstabel

Grundlag for sammenligningTrådRunnable
GrundlæggendeHver tråd skaber et unikt objekt og bliver knyttet til det.Flere tråde deler de samme objekter.
Hukommelse Når hver tråd skaber et unikt objekt, kræves mere hukommelse.Da flere tråde deler det samme objekt, bruges mindre hukommelse.
UdvidelseI Java er flere arver ikke tilladt, og efter at en klasse har udvidet trådklassen, kan den ikke udvide nogen anden klasse.Hvis en klasse definerer tråd, der implementerer Runnable-grænsefladen, har den en chance for at udvide en klasse.
Brug En bruger skal kun udvide trådklasse, hvis den vil tilsidesætte de andre metoder i trådklassen.Hvis du kun vil specialisere køremetoden, er implementering af Runnable en bedre mulighed.
kobling Udvidelse af trådklasse introducerer tæt kobling, da klassen indeholder kode for trådklasse og også det job, der er tildelt trådenImplementering Runnable interface introducerer løs kobling, da trådkoden er separat fra trådenes job.


Definition af trådklasse

Tråd er en klasse i java.lang pakke. Trådklassen udvider en Objekt klasse, og det implementerer Runnable grænseflader. Trådklassen har konstruktører og metoder til at oprette og betjene på tråden. Når vi opretter flere tråde, opretter hver tråd et unikt objekt og bliver knyttet til det objekt. Hvis du opretter en tråd, der udvider trådklassen, kan du yderligere ikke udvide nogen anden klasse, da java ikke understøtter flere arv. Så du bør kun vælge at udvide trådklassen, når du også vil tilsidesætte nogle andre metoder til trådklasse. Lad os se et eksempel på at oprette en tråd, der udvider en trådklasse.

/ * Definition af en tråd * / Class Mythread udvider tråden {/ * job af tråden * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread" ); }} Class mainThread {/ * job af hovedtråd * / public static void main (String args) {Mythread mt = new Mythread (); / * hovedtråd oprettede undertråden * / mt.start (); for (int i = 0; i <10; i ++) {System.Out. ("Hovedtråd"); }}} / * Output * / Hovedtråd Hovedtråd Hovedtråd Hovedtråd Barnetråd Barnetråd Barnetråd Barnetråd Hovedtråd Barnetråd Hovedtråd Hovedtråd Barnetråd Hovedtråd Hovedtråd Hovedtråd Barnetråd Hovedtråd Hovedtråd Hovedtråd Hovedtråd Barnetråd Hovedtråd Hovedtråd Hovedtråd Barnetråd Barnetråd Hovedtråd Hovedtråd Hovedtråd Børnetråd Hovedtråd Hovedtråd Hovedtråd Barnetråd Barnetråd Hovedtråd Main tråd

I koden ovenfor opretter jeg en klasse Mythread, der udvider trådklassen og tilsidesætter en køremetode fra trådklassen. I klassen, der indeholder hovedmetoden, opretter jeg et trådobjekt (mt) af Mythread-klassen og ved hjælp af trådobjektet aktiverede start () -metoden. Startmetoden starter udførelsen af ​​tråden, og på samme tid påkalder JVM køremetoden for tråden. Nu er der to tråde i programmet, en hovedtråd og den anden undertråd oprettet af hovedtråden. Udførelsen af ​​begge tråde foregår samtidig, men det nøjagtige output kan ikke foregives.


Definition af Runnable Interface

Runnable er en grænseflade i java.lang pakke. Implementering Runnable interface kan vi definere en tråd. Kørbart interface har en enkelt metode løb(), som implementeres af klassen, der implementerer Runnable interface. Når du vælger at definere tråd, der implementerer en Runnable interface, har du stadig et valg om at udvide enhver anden klasse. Når du opretter flere tråde ved at implementere Runnable interface, deler hver tråd den samme kørbare instans. lad os lære at definere en tråd ved hjælp af Runnable interface.

/ * Definition af en tråd * / Class Runnablethread implementerer Runnable {/ * job for tråden * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread" ); }} Klass mainThread {/ * job af hovedtråd * / public static void main (String args) {Mythread rt = new Mythread (); / * hovedtråd oprettede det kørbare objekt * / Tråd t = ny tråd (rt); / * hovedtråd opretter undertråd og passerede det kørbare objekt * / t.start (); for (int i = 0; i <10; i ++) {System.Out. ("Hovedtråd"); }}} / * Output * / Hovedtråd Hovedtråd Hovedtråd Hovedtråd Barnetråd Barnetråd Barnetråd Barnetråd Hovedtråd Barnetråd Hovedtråd Hovedtråd Barnetråd Hovedtråd Hovedtråd Hovedtråd Barnetråd Hovedtråd Hovedtråd Hovedtråd Hovedtråd Barnetråd Hovedtråd Hovedtråd Hovedtråd Barnetråd Barnetråd Hovedtråd Hovedtråd Hovedtråd Børnetråd Hovedtråd Hovedtråd Hovedtråd Barnetråd Barnetråd Hovedtråd Main tråd

I koden ovenfor oprettede jeg en klasse Runnablethread, der implementerer Runnable interface og definerer jobbet for tråden ved at implementere run () -metoden i Runnable interface. Derefter opretter jeg en klassehovedtråd, der indeholder hovedmetoden. Inde i hovedmetoden erklærede jeg et kørbart objekt i klassen Runnablethread og sendte dette objekt til trådens konstruktør, mens jeg erklærede en tråd. På denne måde forbinde jeg trådobjektet (t) med et kørbart objekt (rt). Derefter påberåber trådobjektet startmetoden for tråden, som yderligere påkalder køremetoden i Runnablethread-klassen. Hvis jeg ikke havde koblet kørbart objekt med trådobjekt, ville trådstartmetoden have påkaldt køremetoden i trådklassen. Nu er der igen to tråde i koden, hovedtråd og hovedtråd skaber underordnet tråd begge udføres samtidig, men nøjagtig output kan aldrig foregives.

Vigtige forskelle mellem tråd og kørsel i Java

  1. Hver tråd oprettet ved at udvide tråden klassen opretter et unikt objekt til det og blive tilknyttet det objekt. På den anden side deler hver tråd, der er oprettet ved at implementere en Runnable interface, den samme kørbare instans.
  2. Da hver tråd er forbundet med et unikt objekt, når de oprettes ved at udvide trådklassen, kræves mere hukommelse. På den anden side deler hver tråd oprettet ved implementering af Runnable interface samme objektplads, og det kræver derfor mindre hukommelse.
  3. Hvis du udvider trådklassen så videre, kan du arve enhver anden klasse, da Java ikke tillader flere arv, mens implementering af Runnable stadig giver en chance for en klasse at arve enhver anden klasse.
  4. Man skal kun udvide en trådklasse, hvis den skal tilsidesætte eller specialisere nogle andre metoder til trådklasse. Du skal implementere en Runnable-grænseflade, hvis du kun ønsker at specialisere løbsmetoden.
  5. Udvidelse af trådklassen introducerer tæt kobling i koden, da koden for gevind og jobtråd er indeholdt i den samme klasse. På den anden side introducerer Runnable interface implementerer løs kobling i koden, da trådkoden adskilles fra det job, der er tildelt til tråden.

Konklusion:

Det foretrækkes at implementere en Runnable interface i stedet for at udvide trådklassen. Da implementering af Runnable gør din kode løst koblet, da trådkoden er forskellig fra klassen, der tildeler job til tråden. Det kræver mindre hukommelse og giver også en klasse mulighed for at arve enhver anden klasse.