logo

Multithreading in Java

  1. Multithreading
  2. Multitasking
  3. Prozessbasiertes Multitasking
  4. Threadbasiertes Multitasking
  5. Was ist Thread?

Multithreading in Java ist ein Prozess, bei dem mehrere Threads gleichzeitig ausgeführt werden.

Ein Thread ist ein leichter Unterprozess, die kleinste Verarbeitungseinheit. Multiprocessing und Multithreading werden beide verwendet, um Multitasking zu erreichen.

Fakultät in c

Wir verwenden jedoch Multithreading anstelle von Multiprocessing, da Threads einen gemeinsam genutzten Speicherbereich verwenden. Sie weisen keinen separaten Speicherbereich zu, wodurch Speicher gespart wird, und der Kontextwechsel zwischen den Threads nimmt weniger Zeit in Anspruch als der Prozess.

Java Multithreading wird hauptsächlich in Spielen, Animationen usw. verwendet.


Vorteile von Java Multithreading

1) Es blockiert den Benutzer nicht weil Threads unabhängig sind und Sie mehrere Vorgänge gleichzeitig ausführen können.

2) Du kann viele Vorgänge gleichzeitig ausführen und spart so Zeit .

3) Threads sind unabhängig , sodass es keine Auswirkungen auf andere Threads hat, wenn in einem einzelnen Thread eine Ausnahme auftritt.


Multitasking

Multitasking ist ein Prozess, bei dem mehrere Aufgaben gleichzeitig ausgeführt werden. Wir nutzen Multitasking, um die CPU auszulasten. Multitasking kann auf zwei Arten erreicht werden:

  • Prozessbasiertes Multitasking (Multiprocessing)
  • Thread-basiertes Multitasking (Multithreading)

1) Prozessbasiertes Multitasking (Multiprocessing)

  • Jeder Prozess hat eine Adresse im Speicher. Mit anderen Worten: Jeder Prozess weist einen separaten Speicherbereich zu.
  • Ein Prozess ist Schwergewicht.
  • Die Kosten für die Kommunikation zwischen den Prozessen sind hoch.
  • Der Wechsel von einem Prozess zu einem anderen erfordert einige Zeit zum Speichern und Laden registriert , Speicherkarten, Aktualisierungslisten usw.

2) Thread-basiertes Multitasking (Multithreading)

  • Threads teilen sich denselben Adressraum.
  • Ein Faden ist leicht.
  • Die Kommunikationskosten zwischen den Threads sind gering.

Hinweis: Für jeden Thread ist mindestens ein Prozess erforderlich.

Was ist Thread in Java?

Ein Thread ist ein leichter Unterprozess, die kleinste Verarbeitungseinheit. Es handelt sich um einen separaten Ausführungspfad.

Threads sind unabhängig. Wenn in einem Thread eine Ausnahme auftritt, hat dies keine Auswirkungen auf andere Threads. Es verwendet einen gemeinsam genutzten Speicherbereich.

Java-Multithreading

Wie in der obigen Abbildung gezeigt, wird innerhalb des Prozesses ein Thread ausgeführt. Es gibt einen Kontextwechsel zwischen den Threads. Es kann mehrere Prozesse innerhalb des Betriebssystems geben und ein Prozess kann mehrere Threads haben.

Hinweis: Es wird jeweils nur ein Thread ausgeführt.

Java-Thread-Klasse

Java bietet Thread-Klasse um Thread-Programmierung zu erreichen. Thread-Klasse bietet Konstrukteure und Methoden zum Erstellen und Ausführen von Vorgängen für einen Thread. Thread-Klasse wird erweitert Objektklasse und implementiert die Runnable-Schnittstelle.

Java-Thread-Methoden

S.N. Modifikator und Typ Methode Beschreibung
1) Leere Start() Es wird verwendet, um die Ausführung des Threads zu starten.
2) Leere laufen() Es wird verwendet, um eine Aktion für einen Thread auszuführen.
3) Statische Leere schlafen() Es schläft einen Thread für die angegebene Zeitspanne.
4) statischer Thread currentThread() Es gibt einen Verweis auf das aktuell ausgeführte Thread-Objekt zurück.
5) Leere verbinden() Es wartet darauf, dass ein Thread stirbt.
6) int getPriority() Es gibt die Priorität des Threads zurück.
7) Leere Priorität setzen() Es ändert die Priorität des Threads.
8) Zeichenfolge getName() Es gibt den Namen des Threads zurück.
9) Leere Name einsetzen() Es ändert den Namen des Threads.
10) lang getId() Es gibt die ID des Threads zurück.
elf) Boolescher Wert ist am Leben() Es testet, ob der Thread aktiv ist.
12) Statische Leere Ertrag() Dadurch wird das aktuell ausgeführte Thread-Objekt angehalten und andere Threads können vorübergehend ausgeführt werden.
13) Leere aussetzen() Es wird verwendet, um den Thread anzuhalten.
14) Leere wieder aufnehmen() Es wird verwendet, um den angehaltenen Thread fortzusetzen.
fünfzehn) Leere stoppen() Es wird verwendet, um den Thread zu stoppen.
16) Leere zerstören() Es wird verwendet, um die Thread-Gruppe und alle ihre Untergruppen zu zerstören.
17) Boolescher Wert isDaemon() Es testet, ob der Thread ein Daemon-Thread ist.
18) Leere setDaemon() Es markiert den Thread als Daemon- oder Benutzer-Thread.
19) Leere unterbrechen() Es unterbricht den Thread.
zwanzig) Boolescher Wert isinterrupted() Es prüft, ob der Thread unterbrochen wurde.
einundzwanzig) statischer boolescher Wert unterbrochen() Es prüft, ob der aktuelle Thread unterbrochen wurde.
22) statisch int activeCount() Es gibt die Anzahl der aktiven Threads in der Thread-Gruppe des aktuellen Threads zurück.
23) Leere checkAccess() Es bestimmt, ob der aktuell laufende Thread die Berechtigung hat, den Thread zu ändern.
24) statischer boolescher Wert holdLock() Es gibt genau dann „true“ zurück, wenn der aktuelle Thread die Monitorsperre für das angegebene Objekt hält.
25) Statische Leere dumpStack() Es wird verwendet, um einen Stack-Trace des aktuellen Threads im Standardfehlerstrom zu drucken.
26) StackTraceElement[] getStackTrace() Es gibt ein Array von Stack-Trace-Elementen zurück, die den Stack-Dump des Threads darstellen.
27) statisch int aufzählen() Es wird verwendet, um die Thread-Gruppe und ihre Untergruppe jedes aktiven Threads in das angegebene Array zu kopieren.
28) Thread.State getState() Es wird verwendet, um den Status des Threads zurückzugeben.
29) ThreadGroup getThreadGroup() Es wird verwendet, um die Thread-Gruppe zurückzugeben, zu der dieser Thread gehört
30) Zeichenfolge toString() Es wird verwendet, um eine Zeichenfolgendarstellung dieses Threads zurückzugeben, einschließlich des Namens, der Priorität und der Thread-Gruppe des Threads.
31) Leere benachrichtigen() Es wird verwendet, um die Benachrichtigung nur für einen Thread zu geben, der auf ein bestimmtes Objekt wartet.
32) Leere notifyAll() Es wird verwendet, um die Benachrichtigung an alle wartenden Threads eines bestimmten Objekts zu senden.
33) Leere setContextClassLoader() Es legt den Kontext ClassLoader für den Thread fest.
3. 4) ClassLoader getContextClassLoader() Es gibt den Kontext ClassLoader für den Thread zurück.
35) statischer Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler() Es gibt den Standardhandler zurück, der aufgerufen wird, wenn ein Thread aufgrund einer nicht abgefangenen Ausnahme abrupt beendet wird.
36) Statische Leere setDefaultUncaughtExceptionHandler() Es legt den Standardhandler fest, der aufgerufen wird, wenn ein Thread aufgrund einer nicht abgefangenen Ausnahme abrupt beendet wird.
Wissen Sie
  • Wie führe ich zwei Aufgaben mit zwei Threads aus?
  • Wie führt man Multithreading nach anonymer Klasse durch?
  • Was ist der Thread-Scheduler und was ist der Unterschied zwischen präemptiver Planung und Time-Slicing?
  • Was passiert, wenn wir einen Thread zweimal starten?
  • Was passiert, wenn wir die run()-Methode anstelle der start()-Methode aufrufen?
  • Was ist der Zweck der Join-Methode?
  • Warum beendet JVM den Daemon-Thread, wenn keine Benutzer-Threads übrig sind?
  • Was ist der Shutdown-Hook?
  • Was ist Garbage Collection?
  • Was ist der Zweck der finalize()-Methode?
  • Was bedeutet die gc()-Methode?
  • Was ist Synchronisation und warum wird Synchronisation verwendet?
  • Was ist der Unterschied zwischen synchronisierter Methode und synchronisiertem Block?
  • Welche zwei Möglichkeiten gibt es, eine statische Synchronisierung durchzuführen?
  • Was ist ein Deadlock und wann kann er auftreten?
  • Was ist Interthread-Kommunikation oder Kooperation?
Was werden wir im Multithreading lernen?
  • Multithreading
  • Lebenszyklus eines Threads
  • Zwei Möglichkeiten, einen Thread zu erstellen
  • So führen Sie mehrere Aufgaben durch mehrere Threads aus
  • Thread-Planer
  • Einen Thread schlafen
  • Können wir einen Thread zweimal starten?
  • Was passiert, wenn wir die run()-Methode anstelle der start()-Methode aufrufen?
  • Einem Thread beitreten
  • Einen Thread benennen
  • Priorität eines Threads
  • Daemon-Thread
  • ShutdownHook
  • Müllabfuhr
  • Synchronisation mit synchronisierter Methode
  • Synchronisierter Block
  • Statische Synchronisierung
  • Sackgasse
  • Kommunikation zwischen Threads