- Multithreading
- Multitasking
- Prozessbasiertes Multitasking
- Threadbasiertes Multitasking
- 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.
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. |
- 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?
- 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