Rozdíl mezi třídou vláken a spustitelným rozhraním v Javě

Autor: Laura McKinney
Datum Vytvoření: 1 Duben 2021
Datum Aktualizace: 10 Smět 2024
Anonim
Rozdíl mezi třídou vláken a spustitelným rozhraním v Javě - Technologie
Rozdíl mezi třídou vláken a spustitelným rozhraním v Javě - Technologie

Obsah


Vlákno lze definovat dvěma způsoby. Nejprve od rozšíření třídy vlákna který již implementoval rozhraní Runnable. Za druhé, přímo implementace rozhraní Runnable. Když definujete vlákno rozšířením třídy Thread, musíte přepsat metodu run () ve třídě Thread. Když definujete vlákno implementující rozhraní Runnable, musíte implementovat metodu only run () rozhraní Runnable. Základní rozdíl mezi podprocesem a spustitelným je v tom, že každé vlákno definované rozšířením třídy vlákna vytvoří jedinečný objekt a bude s ním spojeno. Na druhé straně každé vlákno definované implementací rozhraní Runnable sdílí stejný objekt.

Podívejme se na některé další rozdíly mezi vláknem a runnable pomocí srovnávací tabulky níže:


  1. Srovnávací tabulka
  2. Definice
  3. Klíčové rozdíly
  4. Závěr

Srovnávací tabulka

Základ pro srovnáníVláknoRunnable
ZákladníKaždé vlákno vytvoří jedinečný objekt a bude s ním spojeno.Více vláken sdílí stejné objekty.
Paměť Protože každé vlákno vytváří jedinečný objekt, vyžaduje více paměti.Protože více vláken sdílí stejný objekt, používá se méně paměti.
RozšiřujícíV Javě tedy není povoleno vícenásobné dědictví, poté, co třída rozšíří třídu vlákna, nemůže rozšířit žádnou jinou třídu.Pokud třída definuje vlákno implementující rozhraní Runnable, má šanci rozšířit jednu třídu.
Použití Uživatel musí rozšířit třídu vlákna, pouze pokud chce přepsat ostatní metody ve třídě Thread.Pokud chcete pouze specializovat metodu run, pak implementace Runnable je lepší volbou.
Spojování Rozšíření třídy vlákna zavádí těsné spojení, protože třída obsahuje kód třídy vlákna a také úlohu přiřazenou k vláknuImplementace rozhraní Runnable zavádí volné propojení, protože kód vlákna je samostatnou součástí úlohy vláken.


Definice třídy vlákna

Vlákno je třída v java.lang balík. Třída vlákna rozšiřuje Objekt třídy, a to implementuje Runnable rozhraní. Třída vlákna má konstruktory a metody pro vytváření a provozování vlákna. Když vytváříme více vláken, každé vlákno vytvoří jedinečný objekt a bude s ním spojeno. Pokud vytvoříte vlákno rozšiřující třídu vlákna, dále nemůžete rozšířit žádnou jinou třídu, protože java nepodporuje vícenásobnou dědičnost. Proto byste se měli rozhodnout rozšířit třídu vlákna, pouze pokud chcete také potlačit některé jiné metody třídy vlákna. Podívejme se na příklad vytvoření vlákna rozšiřujícího třídu vlákna.

/ * Definování vlákna * / Třída Mythread rozšiřuje vlákno {/ * úloha vlákna * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread" ); }} Třída mainThread {/ * úloha hlavního vlákna * / public static void main (String args) {Mythread mt = new Mythread (); / * hlavní vlákno vytvořilo podřízené vlákno * / mt.start (); pro (int i = 0; i <10; i ++) {System.Out. ("Hlavní vlákno"); }}} / * Výstup * / Hlavní vlákno Hlavní vlákno Hlavní vlákno Hlavní vlákno Dětské vlákno Dětské vlákno Dětské vlákno Dětské vlákno Dětské vlákno Dětské vlákno Hlavní vlákno Dětské vlákno Hlavní vlákno Dětské vlákno Dětské vlákno Dětské vlákno Dětské vlákno Hlavní vlákno Dětské vlákno Dětské vlákno Hlavní vlákno

Ve výše uvedeném kódu vytvářím třídu Mythread, která rozšiřuje třídu Thread a potlačuje metodu run třídy Thread. Ve třídě obsahující hlavní metodu vytvořím objekt podprocesu (mt) třídy Mythread a pomocí objektu podprocesu vyvolám metodu start (). Metoda start spouští vlákno a současně JVM vyvolá metodu běhu vlákna. Nyní jsou v programu dvě vlákna, jedno hlavní vlákno a druhé podřízené vlákno vytvořené hlavním vláknem. K provedení obou vláken dochází současně, ale přesný výstup nelze předstírat.

Definice spustitelného rozhraní

Runnable je rozhraní v java.lang balík. Implementací Runnable rozhraní můžeme definovat vlákno. Spustitelné rozhraní má jednu metodu běh(), který je implementován třídou implementující rozhraní Runnable. Pokud se rozhodnete definovat vlákno implementující rozhraní Runnable, máte stále možnost rozšířit jakoukoli jinou třídu. Když vytvoříte více podprocesů implementací rozhraní Runnable, každé vlákno sdílí stejnou instanci Runnable. naučme se, jak definovat vlákno pomocí rozhraní Runnable.

/ * Definování vlákna * / Třída Runnablethread implementuje Runnable {/ * úlohu vlákna * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread") ); }} Třída mainThread {/ * úloha hlavního vlákna * / public static void main (String args) {Mythread rt = new Mythread (); / * hlavní vlákno vytvořilo spustitelný objekt * / vlákno t = nové vlákno (rt); / * hlavní vlákno vytvoří podřízené vlákno a předalo spustitelný objekt * / t.start (); pro (int i = 0; i <10; i ++) {System.Out. ("Hlavní vlákno"); }}} / * Výstup * / Hlavní vlákno Hlavní vlákno Hlavní vlákno Hlavní vlákno Dětské vlákno Dětské vlákno Dětské vlákno Dětské vlákno Dětské vlákno Dětské vlákno Hlavní vlákno Dětské vlákno Hlavní vlákno Dětské vlákno Dětské vlákno Dětské vlákno Dětské vlákno Hlavní vlákno Dětské vlákno Dětské vlákno Hlavní vlákno

Ve výše uvedeném kódu jsem vytvořil třídu Runnablethread, která implementuje rozhraní Runnable a definuje úlohu vlákna implementací metody run () rozhraní Runnable. Poté vytvořím mainthread třídy obsahující hlavní metodu. Uvnitř hlavní metody jsem deklaroval spustitelný objekt třídy Runnablethread a předal tento objekt konstruktoru vlákna při deklarování vlákna. Tímto způsobem jsem propojil podprocesový objekt (t) se spustitelným objektem (rt). Potom objekt podprocesu vyvolá metodu start podprocesu, která dále vyvolá metodu Runnablethread třídy. Kdybych nepřipojil spustitelný objekt k objektu Thread, pak by metoda startování vláken vyvolala metodu run třídy Thread. Nyní jsou v kódu opět dvě vlákna, hlavní vlákno a hlavní vlákno vytváří podřízené vlákno, které se provádí současně, ale přesný výstup nelze nikdy předstírat.

Klíčové rozdíly mezi podprocesem a spustitelnou v Javě

  1. Každé vlákno vytvořené rozšířením třídy vlákno pro něj vytvoří jedinečný objekt a bude s ním spojeno. Na druhé straně každé vlákno vytvořené implementací rozhraní Runnable sdílí stejnou instanci Runnable.
  2. Protože každé vlákno je spojeno s jedinečným objektem, když je vytvořeno rozšířením třídy vlákna, je vyžadováno více paměti. Na druhé straně každé vlákno vytvořené implementací rozhraní Runnable sdílí stejný prostor objektů, a proto vyžaduje méně paměti.
  3. Pokud dále rozšíříte třídu vláken, můžete zdědit jakoukoli jinou třídu, protože Java neumožňuje vícenásobnou dědičnost, zatímco implementace Runnable stále poskytuje příležitost třídě zdědit jakoukoli jinou třídu.
  4. Jeden musí rozšířit třídu vlákna, pouze pokud musí přepsat nebo specializovat některé jiné metody třídy vlákna. Rozhraní Runnable musíte implementovat, pokud chcete pouze specializovat metodu run.
  5. Rozšíření třídy vlákno zavádí úzké propojení v kódu, protože kód vlákna a úloha vlákna je obsažena ve stejné třídě. Na druhé straně implementační rozhraní Runnable zavádí volné propojení v kódu, protože kód vlákna je oddělen od úlohy přiřazené vláknu.

Závěr:

Je výhodné implementovat rozhraní Runnable místo rozšíření třídy vlákna. Implementace Runnable způsobí, že váš kód bude volně spřažen, protože kód vlákna se liší od třídy, která přiřazuje úloze vláknu. Vyžaduje méně paměti a také umožňuje třídě zdědit jakoukoli jinou třídu.