1. Das Konzept des Threads: Thread bezieht sich von Anfang bis Ende auf den Ausführungsfluss einer Aufgabe. Der Faden bietet einen Mechanismus zum Ausführen von Aufgaben. Für Java können mehrere Threads gleichzeitig in einem Programm ausgeführt werden, und diese Threads können gleichzeitig auf einem Multiprozessor -System ausgeführt werden. Wenn das Programm als Anwendung ausgeführt wird, startet der Java -Interpreter einen Thread für die Main () -Methode.
2. Parallel und Parallelität:
(1) Parallelität: In einem einzelnen Prozessorsystem teilen mehrere Threads die CPU -Zeit und das Betriebssystem ist für die Planung und Zuordnung von Ressourcen für diese verantwortlich.
(2) Parallelität: In einem Multiprozessorsystem können mehrere Prozessoren gleichzeitig mehrere Threads ausführen. Diese Themen können gleichzeitig gleichzeitig ausgeführt werden. Im Gegensatz zu Parallelität können nur mehrere Threads die CPU -Zeit teilen, und nur ein Thread kann gleichzeitig ausgeführt werden.
3.. Erstellung von Fäden:
(1) Grundkonzept: Jede Aufgabe in Java ist ein runnierbares Objekt. Um eine Aufgabe zu erstellen, muss zuerst die Taskklasse definiert werden und die Task -Klasse muss die Runnable -Schnittstelle implementieren. Und Themen sind im Wesentlichen Objekte, die für die Ausführung von Aufgaben geeignet sind. Der Ausführungsprozess eines Threads ist die Ausführung der Run () -Methode in einer Aufgabenklasse bis zum Ende.
(2) Erstellen Sie Threads über die Runnable -Schnittstelle:
A. Definieren Sie eine Aufgabenklasse, um die Runnable -Schnittstelle zu implementieren, die Run () -Methode in der Runnable -Schnittstelle zu implementieren (die Methode run (), die dem System -Thread ausführt) und definieren Sie den spezifischen Taskcode oder die Verarbeitungslogik in der Run () -Methode.
B. Erstellen Sie nach Definieren der Aufgabenklasse ein Task -Objekt für die Aufgabenklasse.
C. Die Aufgabe muss in einem Thread ausgeführt werden, ein Objekt der Tread -Klasse erstellen und das zuvor erstellte Task -Class -Objekt übergeben, das die Runnable -Schnittstelle zum Konstruktor der Profilklasse als Parameter implementiert.
D. Rufen Sie die Start () -Methode des Profilklassenobjekts auf und starten Sie einen Thread. Es führt dazu, dass die Run () -Methode der Aufgabe ausgeführt wird. Wenn die Run () -Methode ausgeführt wird, endet der Thread.
Beispielcode:
Paket com.muzeet.mutithread; // Jede Aufgabe ist eine Instanz der ablaufbaren Schnittstelle. Die Aufgabe ist ein ablaufbares Objekt, und der Thread ist ein Objekt, das die Ausführung der Aufgabe erleichtert. Sie müssen eine Aufgabenklasse erstellen und die Auslaufmethode überschreiben, um die Aufgabe zu definieren, die öffentliche Klasse -ThreadDemo1 -Geräte runnable {private int Countdown = 10; @Override // Schreiben Sie die Run-Methode neu und definieren Sie die Aufgabe public void run () {while (Countdown--> 0) {System.out.println ("$" + thread.currentThread (). GetName () + "(" + countdown + ")); }} // Aufrufen der Startmethode startet einen Thread, wodurch die Ausführungsmethode in der Aufgabe aufgerufen wird. Nach der Ausführung der Run -Methode endet der Thread öffentlich statische void main (String [] args) {Runnable Demo1 = new ThreadDemo1 (); Thread Thread1 = neuer Thread (Demo1); Thread 2 = neuer Thread (Demo1); Thread1.Start (); thread2.Start (); System.out.println ("Rocket Launch Countdown:"); }}Programmauslaufergebnisse:
Countdown für Rocket Launch: $ Thread-0 (9) $ Thread-0 (8) $ Thread-0 (7) $ Thread-0 (6) $ Thread-0 (5) $ Thread-0 (4) $ Thread-0 (3) $ Thread-0 (2) $ Thread-0 (1) $ Thread-0 (0)
Führen Sie zwei Task -Objekte gleichzeitig aus:
public static void main (String [] args) {runnable Demo1 = neuer ThreadDemo1 (); Runnable Demo2 = neuer ThreadDemo1 (); Thread Thread1 = neuer Thread (Demo1); Thread2 = neuer Thread (Demo2); Thread1.Start (); thread2.Start (); System.out.println ("Rocket Launch Countdown:"); }Auslaufergebnisse:
Countdown für Raketenstart: $ Thread-0 (9) $ Thread-0 (8) $ Thread-0 (7) $ Thread-0 (6) $ Thread-1 (9) $ Thread-0 (5) $ Thread-1 (8) $ Thread-0 (4) $ Thread-1 (7) $ Thread-0 (3) $ Thread-1 (6) $ Thread-1 (5) $ Thread-0 (2) $ Thread-1 (4) $ Thread-1 (3) $ Thread-1 (2) $ Thread-1 (1) $ Thread-1 (0) $ Thread-0 (1) $ Thread-0 (0)
(3) Erben Sie die Thread -Klasse, um einen Thread zu erstellen:
A. Erstellen Sie zunächst eine Taskklasse erweitert Thread Class. Da die Thread -Klasse die Runnable -Schnittstelle implementiert, implementiert die kundenspezifische Taskklasse auch die Methode für die Runnable -Schnittstelle und die Wiederholung (), die spezifischen Taskcode oder Verarbeitungslogik definiert.
B. Erstellen Sie ein Task -Class -Objekt, das Thread oder als benutzerdefinierte variable Typ ausführen kann.
C. Rufen Sie die Methode start () des benutzerdefinierten Objekts auf und starten Sie einen Thread.
Beispielcode:
Paket com.muzeet.mutithread; // Jede Aufgabe ist eine Instanz der ablaufbaren Schnittstelle. Die Aufgabe ist ein ablaufbares Objekt, und der Thread kann das Objekt ausführen. Die Aufgabenklasse muss erstellt werden, und die Run -Methode muss überschrieben werden, um die Aufgabe der öffentlichen Klasse ExtendFromThread Extends Thread {private int Countdown = 10 zu definieren; @Override // Schreiben Sie die Auslaufmethode neu und definieren Sie die Aufgabe public void run () {while (Countdown--> 0) {System.out.println ("$" + this.getName () + "(" + countdown + ")"); }} // Aufrufen der Startmethode startet einen Thread, wodurch die Ausführungsmethode in der Aufgabe aufgerufen wird. Nach der Ausführung der Laufmethode endet der Thread öffentlich statische void main (String [] args) {extendfromThread thread1 = new ExtendFromThread (); ExtendFromThread Thread2 = new ExtendFromThread (); Thread1.Start (); thread2.Start (); System.out.println ("Rocket Launch Countdown:"); }}Auslaufergebnisse:
Countdown für Raketenstart: $ Thread-0 (9) $ Thread-0 (8) $ Thread-0 (7) $ Thread-0 (6) $ Thread-0 (5) $ Thread-0 (4) $ Thread-0 (3) $ Thread-0 (2) $ Thread-0 (1) $ Thread-0 (0) $ Thread-1 (9) $ Thread-1 (8) $ Thread-1 (7) $ Thread-1 (6) $ Thread-1 (5) $ Thread-1 (4) $ Thread-1 (3) $ Thread-1 (2) $ Thread-1 (1) $ Thread-1 (0)
Ein Thread wartet, bis ein weiterer Thread vor der Ausführung endet: Beim Ausführen der PrintNum -Aufgabe wird beim Drucken der Nummer 50 die Aufgabe des Druckens von Zeichen C ausgeführt und nur dann die Aufgabe des Druckens der Druckennummer nach der Ausführung von Thread4 ausführen.
Paket com.muzeet.testThread; öffentliche Klasse PrintNum implementiert runnable {private int dachtnum; public printNum (int n) {dastnum = n; } @Override public void run () {// Todo automatisch generierter Methode Stub Thread4 = neuer Thread (neuer Druckchar ('C', 40)); thread4.Start (); probieren {für (int i = 1; i <= lastnum; i ++) {System.out.println (""+i); if (i == 50) {thread4.join (); }}} catch (interruptedException e) {// Todo automatisch generatter Block e.printstacktrace (); }}}4. Vergleich der beiden Methoden (nachgedruckt)
Zunächst analysieren wir die Ausgabeergebnisse der beiden Methoden. Wir erstellen auch zwei Threads. Warum sind die Ergebnisse unterschiedlich?
Wenn Sie die Runnable -Schnittstelle zum Erstellen von Threads verwenden, können Sie dasselbe Zielobjekt (TreadDEMO1TT = NewTreadDemo1 ();) freigeben und mehrere identische Threads implementieren, um dieselbe Ressource zu verarbeiten. Wenn der erste Thread die Aufgabe abschließt, beträgt Countdown bereits 0, sodass der zweite Thread nicht ausgegeben wird. Wenn Sie die Methode zum Erstellen von Threads nach Thread erben, werden zwei Task -Class -Objekte mit ihren jeweiligen Mitgliedsvariablen erstellt, und sie stören sich nicht gegenseitig.
Dann schauen Sie sich eine Erklärung von JDK an:
Die Runnable -Schnittstelle sollte durch Klassen implementiert werden, die ihre Instanzen über einen bestimmten Thread ausführen möchten. Die Klasse muss eine parameterlose Methode namens Run definieren.
Der Zweck der Gestaltung dieser Schnittstelle besteht darin, ein öffentliches Protokoll für Objekte bereitzustellen, die Code bei aktiven Ausführung ausführen möchten. Zum Beispiel implementiert die Thread -Klasse Runnable. Aktivierung bedeutet, dass ein Thread gestartet wurde und noch nicht aufgehört hat.
Darüber hinaus bietet Runnable eine Aktivierungsmethode für Klassen, die keine Thread -Unterklassen sind. Indem Sie eine Threadinstanz instanziieren und sich als laufendes Ziel betrachten, können Sie eine Klasse ausführen, die Runnable implementiert. In den meisten Fällen sollten Sie die Runnable -Schnittstelle verwenden, wenn Sie nur die Run () -Methode überschreiben und andere Thread -Methoden nicht überschreiben möchten. Dies ist wichtig, da der Programmierer nicht beabsichtigt, das grundlegende Verhalten einer Klasse zu ändern oder zu verbessern, eine Unterklasse für diese Klasse nicht erstellt werden sollte. (Es wird empfohlen, eine Taskklasse zu erstellen und die Runnable -Schnittstelle zu implementieren, anstatt die Thread -Klasse zu erben.)
Übernehmen Sie das Erbe der Thread -Klasse:
(1) Vorteile: Einfach zu schreiben. Wenn Sie auf den aktuellen Thread zugreifen müssen, müssen Sie die Methode von Thread.CurrentThread () nicht verwenden. Sie können den aktuellen Thread direkt mit diesem erhalten.
(2) Nachteile: Da die Thread -Klasse die Thread -Klasse geerbt hat, kann sie andere übergeordnete Klassen nicht erben.
Verwenden der Runnable -Schnittstellenmethode:
(1) Vorteile: Thread -Klassen implementieren nur die ablaufbare Schnittstelle und können auch andere Klassen erben. Auf diese Weise können mehrere Threads dasselbe Zielobjekt teilen, sodass es für mehrere identische Threads sehr geeignet ist, um dieselbe Ressource zu verarbeiten, sodass CPU-Code und Daten getrennt werden können, um ein klares Modell zu bilden, was die objektorientierte Idee besser widerspiegelt.
(2) Nachteile: Die Programmierung ist etwas kompliziert. Wenn Sie auf den aktuellen Thread zugreifen müssen, müssen Sie die Methode von Thread.CurrentThread () verwenden.
Zusammenfassen
Im obigen dreht sich alles um die beiden Möglichkeiten, Threads in Java Multithreading- und Vergleichscode -Beispielen zu erstellen. Ich hoffe, es wird für alle hilfreich sein. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!