Unterschied zwischen Thread-Klasse und ausführbarer Schnittstelle in Java

Autor: Laura McKinney
Erstelldatum: 1 April 2021
Aktualisierungsdatum: 12 Kann 2024
Anonim
Unterschied zwischen Thread-Klasse und ausführbarer Schnittstelle in Java - Technologie
Unterschied zwischen Thread-Klasse und ausführbarer Schnittstelle in Java - Technologie

Inhalt


Ein Thread kann auf zwei Arten definiert werden. Erstens von Thread-Klasse erweitern das hat bereits eine Runnable-Schnittstelle implementiert. Zweitens direkt Implementierung einer Runnable-Schnittstelle. Wenn Sie einen Thread durch Erweitern der Thread-Klasse definieren, müssen Sie die run () -Methode in der Thread-Klasse überschreiben. Wenn Sie einen Thread definieren, der eine ausführbare Schnittstelle implementiert, müssen Sie die einzige run () -Methode der ausführbaren Schnittstelle implementieren. Der grundlegende Unterschied zwischen Thread und Runnable besteht darin, dass jeder Thread, der durch Erweitern der Thread-Klasse definiert wird, ein eindeutiges Objekt erstellt und diesem Objekt zugeordnet wird. Auf der anderen Seite hat jeder Thread, der durch die Implementierung der Runnable-Schnittstelle definiert wurde, dasselbe Objekt.

Lassen Sie uns einige andere Unterschiede zwischen Thread und Runnable anhand der folgenden Vergleichstabelle beobachten:


  1. Vergleichstabelle
  2. Definition
  3. Hauptunterschiede
  4. Fazit

Vergleichstabelle

Grundlage für den VergleichFadenLauffähig
BasicJeder Thread erstellt ein eindeutiges Objekt und wird diesem zugeordnet.Mehrere Threads teilen sich die gleichen Objekte.
Erinnerung Da jeder Thread ein eindeutiges Objekt erstellt, ist mehr Speicher erforderlich.Da sich mehrere Threads dasselbe Objekt teilen, wird weniger Speicher verwendet.
VerlängernIn Java ist Mehrfachvererbung nicht zulässig. Nachdem eine Klasse die Thread-Klasse erweitert hat, kann sie keine andere Klasse erweitern.Wenn eine Klasse einen Thread definiert, der die Runnable-Schnittstelle implementiert, besteht die Möglichkeit, dass eine Klasse erweitert wird.
Verwenden Ein Benutzer muss die Thread-Klasse nur erweitern, wenn er die anderen Methoden in der Thread-Klasse überschreiben möchte.Wenn Sie nur die Ausführungsmethode spezialisieren möchten, ist die Implementierung von Runnable eine bessere Option.
Kupplung Durch das Erweitern der Thread-Klasse wird eine enge Kopplung eingeführt, da die Klasse den Code der Thread-Klasse sowie den dem Thread zugewiesenen Job enthältDas Implementieren der Runnable-Schnittstelle führt zu einer losen Kopplung, da der Code von Thread von der Aufgabe von Threads getrennt ist.


Definition der Fadenklasse

Faden ist eine Klasse in java.lang Paket. Die Thread-Klasse erweitert ein Objekt Klasse, und es implementiert Lauffähig Schnittstellen. Die Thread-Klasse verfügt über Konstruktoren und Methoden zum Erstellen und Verarbeiten des Threads. Wenn wir mehrere Threads erstellen, erstellt jeder Thread ein eindeutiges Objekt und wird diesem Objekt zugeordnet. Wenn Sie eine Thread-erweiternde Thread-Klasse erstellen, können Sie keine weitere Klasse erweitern, da Java die Mehrfachvererbung nicht unterstützt. Daher sollten Sie die Thread-Klasse nur erweitern, wenn Sie auch einige andere Methoden der Thread-Klasse überschreiben möchten. Sehen wir uns ein Beispiel zum Erstellen eines Threads an, der eine Thread-Klasse erweitert.

/ * Einen Thread definieren * / Klasse Mythread erweitert Thread {/ * Job des Threads * / public void run () {für (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread") ); }} Klasse mainThread {/ * Job des Hauptthreads * / public static void main (String args) {Mythread mt = new Mythread (); / * main thread hat den untergeordneten Thread erstellt * / mt.start (); für (int i = 0; i <10; i ++) {System.Out. ("Haupt-Thread"); }}} / * Output * / Hauptfaden Hauptfaden Hauptfaden Hauptfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Hauptfaden

Im obigen Code erstelle ich eine Klasse Mythread, die die Thread-Klasse erweitert und eine Ausführungsmethode der Thread-Klasse überschreibt. In der Klasse mit der Hauptmethode erstelle ich ein Thread-Objekt (mt) der Mythread-Klasse und benutze das Thread-Objekt, um die start () -Methode aufzurufen. Die start-Methode startet die Ausführung des Threads und gleichzeitig ruft JVM die run-Methode des Threads auf. Jetzt gibt es zwei Threads im Programm, einen Haupt-Thread und einen zweiten untergeordneten Thread, die vom Haupt-Thread erstellt wurden. Die Ausführung beider Threads erfolgt gleichzeitig, die genaue Ausgabe kann jedoch nicht vorgetäuscht werden.

Definition der ausführbaren Schnittstelle

Lauffähig ist eine Schnittstelle in java.lang Paket. Durch die Implementierung von Runnable Interface können wir einen Thread definieren. Die ausführbare Schnittstelle verfügt über eine einzige Methode Lauf(), Dies wird von der Klasse implementiert, die die Runnable-Schnittstelle implementiert. Wenn Sie einen Thread definieren, der eine Runnable-Schnittstelle implementiert, haben Sie weiterhin die Möglichkeit, eine beliebige andere Klasse zu erweitern. Wenn Sie durch Implementierung der ausführbaren Schnittstelle mehrere Threads erstellen, verwendet jeder Thread dieselbe ausführbare Instanz. Lassen Sie uns lernen, wie Sie einen Thread mit der Runnable-Schnittstelle definieren.

/ * Einen Thread definieren * / Class Runnablethread implementiert den ausführbaren {/ * Job des Threads * / public void run () {für (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread") ); }} Klasse mainThread {/ * Job des Hauptthreads * / public static void main (String args) {Mythread rt = new Mythread (); / * main thread hat das ausführbare Objekt erstellt * / Thread t = new Thread (rt); / * main thread erstellt einen untergeordneten Thread und übergibt das ausführbare Objekt * / t.start (); für (int i = 0; i <10; i ++) {System.Out. ("Haupt-Thread"); }}} / * Output * / Hauptfaden Hauptfaden Hauptfaden Hauptfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Unterfaden Hauptfaden

Im obigen Code habe ich eine Klasse Runnablethread erstellt, die die Runnable-Schnittstelle implementiert und den Job des Threads durch Implementieren der run () -Methode der Runnable-Schnittstelle definiert. Dann erstelle ich einen Klassen-Mainthread, der die main-Methode enthält. Innerhalb der Hauptmethode habe ich ein ausführbares Objekt der Klasse Runnablethread deklariert und dieses Objekt an den Konstruktor des Threads übergeben, während ich einen Thread deklariert habe. Auf diese Weise habe ich das Thread-Objekt (t) mit einem ausführbaren Objekt (rt) verknüpft. Dann ruft das Thread-Objekt die start-Methode des Threads auf, wodurch die run-Methode der Runnablethread-Klasse aufgerufen wird. Wenn ich das ausführbare Objekt nicht mit dem Thread-Objekt verknüpft hätte, hätte die Methode threads start die Methode run der Klasse Thread aufgerufen. Nun, wieder gibt es zwei Threads im Code, Haupt-Thread und Haupt-Thread erstellen untergeordnete Threads, die beide gleichzeitig ausgeführt werden, aber die genaue Ausgabe kann niemals vorgetäuscht werden.

Hauptunterschiede zwischen Thread und Runnable in Java

  1. Jeder Thread, der durch Erweitern der Thread-Klasse erstellt wird, erstellt ein eindeutiges Objekt und wird diesem Objekt zugeordnet. Andererseits hat jeder Thread, der durch die Implementierung einer ausführbaren Schnittstelle erstellt wurde, dieselbe ausführbare Instanz.
  2. Da jeder Thread beim Erstellen durch Erweitern der Thread-Klasse einem eindeutigen Objekt zugeordnet ist, ist mehr Speicher erforderlich. Auf der anderen Seite teilt sich jeder Thread, der durch Implementieren der Runnable-Schnittstelle erstellt wird, den gleichen Objektraum, sodass weniger Speicher benötigt wird.
  3. Wenn Sie die Thread-Klasse dann weiter erweitern, können Sie jede andere Klasse erben, da Java keine Mehrfachvererbung zulässt, während die Implementierung von Runnable einer Klasse weiterhin die Möglichkeit bietet, eine andere Klasse zu erben.
  4. Eine Thread-Klasse muss nur erweitert werden, wenn sie andere Methoden der Thread-Klasse überschreiben oder spezialisieren muss. Sie müssen eine Runnable-Schnittstelle implementieren, wenn Sie nur die Ausführungsmethode spezialisieren möchten.
  5. Durch das Erweitern der Thread-Klasse wird eine enge Kopplung im Code eingeführt, da der Code von Thread und der Job von Thread in derselben Klasse enthalten sind. Auf der anderen Seite führt das Implementieren der ausführbaren Schnittstelle eine lose Kopplung in den Code ein, da der Code des Threads von dem dem Thread zugewiesenen Job getrennt ist.

Fazit:

Es wird bevorzugt, eine Runnable-Schnittstelle zu implementieren, anstatt die Thread-Klasse zu erweitern. Durch die Implementierung von Runnable wird Ihr Code lose gekoppelt, da sich der Code des Threads von der Klasse unterscheidet, die dem Thread einen Job zuweist. Es benötigt weniger Speicher und ermöglicht es einer Klasse, jede andere Klasse zu erben.