Heim  >  Artikel  >  Java  >  Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?

Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?

PHPz
PHPznach vorne
2023-04-26 16:07:192162Durchsuche

Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?


Fünf Möglichkeiten, Multi-Threads in Java zu erstellen

(1) Erben Sie die Thread-Klasse

1. Implementierungsbeschreibung

  • Durch das Erben von Thread und das Überschreiben von dessen 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 die Vererbung 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

Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?
Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?
Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?

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 und eine Ressourcenfreigabe 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

Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?
Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?
Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?

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.

  • Das Callable-Objekt kann nicht direkt als Ziel des Thread-Objekts 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 verwendet werden das Ziel 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

Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?
Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?
Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?

4. Hinweise

  • Freigabe von Datenressourcen, mehrere Threads erledigen gemeinsam eine Aufgabe (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

Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?
Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?

Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?

4. Hinweise

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

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

1. Implementierungsbeschreibung

  • Thread-Pools können über die Executors-Toolklasse erstellt werden.

  • Verbessern Sie die Reaktionsgeschwindigkeit des Systems. Wenn eine Aufgabe eintrifft, kann sie durch Wiederverwendung des vorhandenen Threads sofort ausgeführt werden, 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, um die Anzahl gleichzeitiger Threads zu steuern. 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 Bei der gemeinsamen Nutzung von Datenressourcen arbeiten mehrere Threads zusammen, um eine Aufgabe abzuschließen.

2) SingleThreadExecutor( ) Single-Thread-Pool

Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen? (1) Spezifische Schritte
Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?① Erstellen Sie einen Single-Thread-Pool über Executors.newSingleThreadExecutor( )

② Überschreiben Sie die run( )-Methode der Runnable-Klasse und verwenden Sie die Thread-Pool zum Ausführen von Aufgaben
③Shutdown() schließt den Thread-Pool
    (2) Code-Implementierung
(3) Hinweise

Der Thread-Pool erstellt nur einen Thread, um die Aufgabe auszuführen.

3) CachedThreadPool( ) Cache-Thread-Pool

(1) Spezifische Schritte Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?
① Erstellen Sie so viele Thread-Pools wie möglich über Executors.newCachedThreadPool( )

② Überschreiben Sie die run( )-Methode der Runnable-Klasse und verwenden Sie Threads Pool-Ausführungsaufgabe
③Shutdown() schließt den Thread-Pool
    (2) Code-Implementierung
(3) Hinweise


Diese Methode erstellt so viele Threads wie möglich, um die Aufgabe abzuschließen, wie in der Fall Obwohl nur 10 Tickets vorhanden sind, hat der Thread-Pool mindestens 12 Threads generiert.

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

Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen? (1) Spezifische Schritte
Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?① Verwenden Sie Executors.newScheduledThreadPool(5), um eine feste Anzahl von Kern-Threads zu erstellen (Mindestanzahl zu verwaltender Threads, keine Threads). wird nach der Thread-Erstellung erstellt (Recycled) 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() schließt den Thread-Pool Erstellung eines periodischen Thread-Pools, der die geplante und periodische Ausführung von Aufgaben unterstützt (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

Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?
Welche Möglichkeiten gibt es, Multithreading in Java zu erstellen?

(3) Hinweise
  • Da jeder Thread seine eigene Aufgabenwarteschlange hat und es mehr und weniger Aufgaben gibt, kann es zu einem Ungleichgewicht der CPU-Last kommen. 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.

Das obige ist der detaillierte Inhalt vonWelche Möglichkeiten gibt es, Multithreading in Java zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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