Heim  >  Artikel  >  Java  >  Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java

Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java

WBOY
WBOYnach vorne
2022-03-04 17:19:592740Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über Java. Er fasst hauptsächlich fünf Methoden zum Erstellen von Multithreads zusammen und stellt sie vor, darunter das Erben der Thread-Klasse, das Implementieren der Runnable-Schnittstelle, das Implementieren des Callable-Interfaces, das Erben der TimerTask-Klasse und das Übergeben von Threads-Pool-Starts Multithreading, ich hoffe, das hilft allen.

Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java

Empfohlene Studie: „Java-Lern-Tutorial

Fünf Möglichkeiten, Multithreads in Java zu erstellen

  • Dies dient nur der Kommunikation und dem Erlernen der Java-Programmierung. Wenn Sie Fragen haben, wenden Sie sich bitte an erleuchte mich. Willkommen zum Hinzufügen und Kommunizieren, bitte beim Nachdruck angeben!

(1) Erben Sie die Thread-Klasse

1. Implementierungsbeschreibung

  • Durch das Erben von Thread und das Überschreiben von run() werden die auszuführenden Aufgaben in der run-Methode definiert. Die erstellte Unterklasse kann die Thread-Methode ausführen, indem sie die start()-Methode aufruft.
  • Durch das Erben der von Thread implementierten Thread-Klasse können Instanzvariablen der Thread-Klasse nicht von mehreren Threads gemeinsam genutzt werden. Es müssen verschiedene Thread-Objekte erstellt werden, und Ressourcen werden natürlich nicht gemeinsam genutzt.

2. Spezifische Schritte

1) Definieren Sie die UserThread-Klasse und erben Sie die Thread-Klasse
2) Überschreiben Sie die run( )-Methode
3) Erstellen Sie ein UserThread-Objekt
4) Rufen Sie die start( )-Methode auf

3. Code-Implementierung

Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java
Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java
Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java

4. Notizen

  • Datenressourcen werden nicht gemeinsam genutzt und mehrere Threads erledigen ihre eigenen Aufgaben. Wenn beispielsweise drei Kassen gleichzeitig Tickets verkaufen und jede ihre eigenen Tickets verkauft, besteht das Problem, dass drei Kassen dieselben Tickets verkaufen.

(2) Implementieren Sie die Runnable-Schnittstelle

1. Implementierungsbeschreibung

  • Sie müssen zunächst eine Klasse definieren, um die Runnable-Schnittstelle zu implementieren und die run()-Methode der Schnittstelle zu überschreiben. Diese Ausführungsmethode ist der Thread-Ausführungskörper. Erstellen Sie dann ein Objekt der Runnable-Implementierungsklasse als Parameterziel für die Erstellung des Thread-Objekts. Dieses Thread-Objekt ist das eigentliche Thread-Objekt.
  • Verwenden Sie die Thread-Klasse, die die Runnable-Schnittstelle implementiert, um Objekte zu erstellen, um eine gemeinsame Nutzung von Ressourcen zwischen Threads zu erreichen.

2. Spezifische Schritte

1) Definieren Sie eine UserRun-Klasse und implementieren Sie die Runnble-Schnittstelle
2) Überschreiben Sie die run()-Methode
3) Erstellen Sie ein Objekt der UserRun-Klasse
4) Erstellen Sie ein Objekt der Thread-Klasse und das Objekt der Die UserRun-Klasse dient als Konstruktor der Thread-Klassenparameter
5) Thread starten

3. Code-Implementierung

Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java
Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java
Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java

4. Hinweise

  • Bei der gemeinsamen Nutzung von Datenressourcen führen mehrere Threads gemeinsam eine Aufgabe aus (mehrere Threads teilen sich die Ressourcen zum Erstellen von Thread-Objekten). Beispielsweise verkaufen drei Ticketschalter (drei Threads) gleichzeitig Tickets (Tickets in der MyThread-Klasse) und die drei Threads nutzen gemeinsam Ressourcen.

(3) Implementieren Sie die Callable-Schnittstelle

1. Implementierungsbeschreibung

  • Die Callable-Schnittstelle ist wie eine aktualisierte Version der Runable-Schnittstelle. Die von ihr bereitgestellte call()-Methode dient als Ausführungskörper des Threads und ermöglicht einen Rückgabewert.
  • Callable-Objekte können nicht direkt als Ziel von Thread-Objekten verwendet werden, da die Callable-Schnittstelle eine neue Schnittstelle in Java5 und keine Unterschnittstelle der Runnable-Schnittstelle ist.
  • Zur Lösung dieses Problems wird die Future-Schnittstelle eingeführt. Diese Schnittstelle kann den Rückgabewert von call() akzeptieren. Die RunnableFuture-Schnittstelle ist eine Unterschnittstelle der Future-Schnittstelle und der Runnable-Schnittstelle und kann als Ziel verwendet werden des Thread-Objekts.

2. Spezifische Schritte

1) Definieren Sie die Klasse UserCallable und implementieren Sie die Callable-Schnittstelle
2) Überschreiben Sie die call()-Methode
3) Erstellen Sie ein Objekt von UserCallable
4) Erstellen Sie ein Objekt von FutureTask, einer Unterklasse der RunnableFuture-Schnittstelle, und die Parameter des Konstruktors ist das Objekt von UserCallable
5) Erstellen Sie ein Objekt der Thread-Klasse, und der Parameter des Konstruktors ist das Objekt von FutureTask
6) Starten Sie den Thread

3. Code-Implementierung

Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java
Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java
Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java

4. Hinweise

  • Bei der gemeinsamen Nutzung von Datenressourcen führen mehrere Threads gemeinsam eine Aufgabe aus (mehrere Threads teilen sich die Ressourcen zum Erstellen von Thread-Objekten). Beispielsweise verkaufen drei Ticketschalter (drei Threads) gleichzeitig Tickets (Tickets in der MyThread-Klasse) und die drei Threads nutzen gemeinsam Ressourcen. Gleichzeitig gibt es nach Abschluss des Thread-Aufrufs einen Rückgabewert.

(4) Erben Sie die TimerTask-Klasse

1. Implementierungsbeschreibung

  • Die Timer-Klassen Timer und TimerTask können als weitere Möglichkeit zur Implementierung von Threads verwendet werden.
  • Timer ist eine Threading-Funktion, mit der Aufgaben für die spätere Ausführung in einem Hintergrundthread geplant werden. Die Aufgabe kann so geplant werden, dass sie einmal oder wiederholt in regelmäßigen Abständen ausgeführt wird. Sie kann als Timer betrachtet werden und TimerTask kann geplant werden.
  • TimerTask ist eine abstrakte Klasse, die die Runnable-Schnittstelle implementiert und daher über Multithreading-Funktionen verfügt.

2. Spezifische Schritte

1) Definieren Sie die Klasse UserTimerTask und erben Sie die abstrakte Klasse TimerTask
2) Erstellen Sie ein Objekt der UserTask-Klasse
3) Erstellen Sie ein Objekt der Timer-Klasse und legen Sie die Ausführungsstrategie der Aufgabe fest

3. Code-Implementierung

Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java
Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java

Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java

4. Hinweise

  • Die von der Timer-Klasse erstellten Threads werden eher für die Verarbeitung geplanter Aufgaben verwendet, und Datenressourcen werden nicht zwischen Threads gemeinsam genutzt, und mehrere Threads führen jeweils ihre eigenen Aufgaben aus.

(5) Starten Sie Multithreads über den Thread-Pool

1. Implementierungsbeschreibung

  • Thread-Pools können über die Executors-Toolklasse erstellt werden.
  • Verbessern Sie die Reaktionsgeschwindigkeit des Systems, indem Sie den vorhandenen Thread wiederverwenden und ihn sofort ausführen, ohne auf die Erstellung eines neuen Threads warten zu müssen.
  • Reduzieren Sie den Ressourcenverbrauch des Systems und reduzieren Sie den Verbrauch, der durch die Erstellung und Zerstörung von Threads verursacht wird, indem Sie vorhandene Threads wiederverwenden.
  • Praktisch zur Steuerung der Anzahl gleichzeitiger Threads. Denn wenn Threads ohne Begrenzung erstellt werden, kann es aufgrund übermäßiger Speichernutzung zu OOM und zu übermäßigem CPU-Switching kommen.

2. Implementierungsmethode

1) FixThreadPool (int n) Thread-Pool fester Größe

(1) Spezifische Schritte

① Erstellen Sie einen Thread-Pool fester Größe über Executors.newFixedThreadPool(5)
② Überschreiben Sie die run( )-Methode des Ausführbare Klasse und verwenden Sie den Thread-Pool, um Aufgaben auszuführen
③Shutdown( ) schließt den Thread-Pool

(2) Code-Implementierung

Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java
Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java

(3) Hinweise
  • Erstellen Sie einen Thread-Pool mit fester Größe, um Daten zu erhalten Gemeinsame Nutzung von Ressourcen. Mehrere Threads arbeiten zusammen, um eine Aufgabe abzuschließen.

2) SingleThreadExecutor( ) einzelner Thread-Pool

(1) Spezifische Schritte

① Erstellen Sie einen einzelnen Thread-Pool über Executors.newSingleThreadExecutor( )
② Überschreiben Sie die run( )-Methode der Runnable-Klasse und verwenden Sie den Thread-Pool dazu Aufgaben ausführen
③Shutdown() schließt den Thread-Pool

(2) Code-Implementierung

Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java
Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java

(3) Hinweise
  • Der Thread-Pool erstellt nur einen Thread, um die Aufgabe auszuführen.

3) CachedThreadPool() Cache-Thread-Pool

(1) Spezifische Schritte

①Erstellen Sie so viele Thread-Pools wie möglich über Executors.newCachedThreadPool()
②Schreiben Sie die run()-Methode der Runnable-Klasse neu und verwenden Sie den Thread-Pool Execute die Aufgabe
③Shutdown( ) schließt den Thread-Pool

(2) Code-Implementierung

Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java
Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java

(3) Hinweise
  • Diese Methode erstellt so viele Threads wie möglich, um die Aufgabe abzuschließen, wie im Fall: Es gibt zwar nur 10 Tickets, aber der Thread-Pool hat mindestens 12 Threads generiert.

4) ScheduledThreadPool(int n) geplanter periodischer Thread-Pool

(1) Spezifische Schritte

① Verwenden Sie Executors.newScheduledThreadPool(5), um eine feste Anzahl von Kernthreads zu erstellen (die Mindestanzahl der zu verwaltenden Threads, den Thread). wird nach der Erstellung nicht gelöscht (Recycling) Thread-Pool, Threads werden regelmäßig wie geplant ausgeführt.
② Schreiben Sie die run()-Methode der Runnable-Klasse neu und verwenden Sie den Thread-Pool, um Aufgaben auszuführen
③Shutdown(), um den Thread-Pool zu schließen

(2) Code-Implementierung

Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java
Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java

(3) Hinweise
  • Erstellen Sie einen periodischen Thread-Pool, um die geplante und periodische Ausführung von Aufgaben zu unterstützen (der erste Zeitparameter ist die Ausführungsverzögerungszeit und der zweite Parameter ist das Ausführungsintervall).

5) WorkStealingPool()-Erweiterung der neuen Thread-Pool-Klasse ForkJoinPool

(1) Spezifische Schritte

① Erstellen Sie einen Thread-Pool über Executors.newWorkStealingPool()
② Schreiben Sie die run()-Methode der Runnable-Klasse neu Die Thread-Klasse Das Objekt ruft das Runnable-Klassenobjekt auf und verwendet den Thread-Pool, um die Aufgabe auszuführen
③Sleep() ermöglicht es dem Hauptthread, auf den Abschluss der Ausführung durch den untergeordneten Thread zu warten, oder Sie können einen Zähler verwenden
④Shutdown(), um die zu schließen Thread-Pool

(2) Code-Implementierung

Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java
Fünf Wege! Zusammenfassung der Erstellung von Multithreads in Java

(3) Hinweise
  • Da jeder Thread seine eigene Aufgabenwarteschlange hat, kann es zu einer unausgeglichenen CPU-Last kommen, da es mehr und weniger Aufgaben gibt. Diese Methode kann die Vorteile von Multi-Core-CPUs effektiv nutzen. Threads mit weniger Aufgaben können Aufgaben von Threads mit mehr Aufgaben „stehlen“ und so die Ausführung von Aufgaben auf jeder CPU ausbalancieren.

Empfohlenes Lernen: „Java-Tutorial

Das obige ist der detaillierte Inhalt vonFünf Wege! Zusammenfassung der Erstellung von Multithreads in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen