Lebenszyklus von Threads in Java

Veröffentlicht: 2023-01-27

Inhaltsverzeichnis

Grundlagen von Java-Threads:

Ein Thread in Java erleichtert die Ausführung mehrerer Aktivitäten innerhalb eines einzigen Prozesses. Es gilt als Leichtbauverfahren. Ein Thread kann auch als Folge ausgeführter Anweisungen definiert werden. Jeder Thread in Java hat seinen eigenen Stack, Programmzähler und lokale Variablen. Java-Threads können auch eine verschachtelte Reihe von Methodenaufrufen sein. Der Arbeitsspeicher, der Status pro Prozess und die Dateien werden von Threads gemeinsam genutzt.

Verwendung von Threads in Java:

    • Zum Durchführen einer Hintergrund- oder asynchronen Verarbeitung
    • Um die Empfindlichkeit von GUI-Anwendungen zu verbessern
    • Um die positiven Seiten von Multiprozessorsystemen zu implementieren
    • Zur Rationalisierung der Programmierlogik im Falle des Vorhandenseins mehrerer

Es gibt zwei Ausführungspfade, wenn ein Thread aufgerufen wird. Einer der beiden Pfade wird für die Thread-Ausführung verwendet, und der andere folgt der Anweisung, die dem Thread-Aufruf folgt. Jeder Thread in Java hat einen separaten Speicherplatz und Stack.

Folgende Risikofaktoren treten bei der Verwendung von Threads in Java-Codes auf.

  • Eine ordnungsgemäße Koordination zwischen den Threads ist in Fällen erforderlich, in denen Threads auf gemeinsame Variablen zugreifen, um Daten konsistent anzuzeigen.
  • Die Leistung und Wartung von Threads, wenn sie in den Programmen überstrapaziert werden, wird schwierig.

Lebenszyklus von Threads in Java:

Zu jedem Zeitpunkt der Programmausführung existieren die Threads in Java in einem der unten erwähnten Zustände.

  1. Neu
  2. verstopft
  3. Lauffähig
  4. Zeitgesteuertes Warten
  5. Warten
  6. Beendet

Eine detaillierte Ansicht des Lebenszyklus von Threads in Java

Neues Thema:

Der neu erstellte Thread befindet sich im Zustand 'Neu'. Es ist nicht fortgeschritten, um in diesem Zustand zu laufen. Die Ausführung des Codes eines Threads im neuen Zustand muss noch stattfinden. Es soll noch laufen.

Lauffähiger Zustand:

Die Threads im ausführbaren Zustand sind bereit zur Ausführung. Ein Thread in diesem Zustand kann jederzeit sofort laufbereit sein oder bereits laufen. Der Thread-Scheduler verfeinert die Verantwortung für die Zuweisung von Zeit für die Ausführung des Threads. In einem Multithread-Programm wird jedem einzelnen Thread eine bestimmte Zeit zugewiesen. Jeder einzelne Thread läuft für eine kurze Dauer und trifft dann auf eine Pause. Die CPU wird dann einem anderen Thread überlassen, um den anderen Threads die Möglichkeit zu geben, zu laufen. An diesem Punkt befinden sich alle laufbereiten Threads, die auf die CPU warten, und die aktuell laufenden Threads in einem lauffähigen Zustand.

Schauen Sie sich unsere kostenlosen Technologiekurse an, um sich einen Wettbewerbsvorteil zu verschaffen.

Erkunden Sie unsere beliebten Softwareentwicklungskurse

Master of Science in Informatik von LJMU & IIITB Caltech CTME Cybersecurity-Zertifikatsprogramm
Full-Stack-Entwicklungs-Bootcamp PG-Programm in Blockchain
Executive PG-Programm in der Full-Stack-Entwicklung
Sehen Sie sich unten alle unsere Kurse an
Software-Engineering-Kurse

Warte-/Sperrzustand:

Ein Thread befindet sich in einem der unten aufgeführten Zustände, wenn er vorübergehend nicht arbeitet.

  • Warten
  • verstopft

Ein Thread, der auf den Abschluss von E/A wartet, befindet sich in einem blockierten Zustand. Die Funktion des Thread-Schedulers besteht darin, die Ausführung eines blockierten oder wartenden Threads zu planen, indem er ihn reaktiviert. Jeder Thread in diesem Zustand darf nicht weiter ausgeführt werden, bis er in einen lauffähigen Zustand überführt wird. Die Threads im Block- oder Wartezustand verbrauchen keinen CPU-Zyklus.

Ein Thread muss blockiert werden, wenn er versucht, auf den geschützten Abschnitt eines Codes zuzugreifen, der derzeit von einem anderen Thread geschützt wird. Der Scheduler wandelt einen der Threads, die auf einen geschützten Abschnitt warten, in einen lauffähigen Zustand um, wenn der Abschnitt für alle Threads entsperrt ist. Andererseits befindet sich ein Thread in einem Wartezustand, während er unter einer bestimmten Bedingung auf den anderen Thread wartet. Die Threads im Wartezustand werden in einen lauffähigen Zustand versetzt, sobald die für das Warten angegebene Bedingung erfüllt ist. Wenn ein aktuell laufender Thread in einen wartenden/blockierten Zustand versetzt wird, plant der Thread-Scheduler einen anderen Thread aus der lauffähigen Sequenz zur Ausführung ein.

Zeitgesteuertes Warten:

Wenn eine Methode mit einem Timeout-Argument aufgerufen wird, befindet sich der Thread in einem zeitgesteuerten Wartezustand. Ein Thread verbleibt in diesem Zustand bis zum Ablauf des angegebenen Timeouts oder bis zum Empfang einer Benachrichtigung. Beispielsweise wird ein Thread in einen zeitgesteuerten Wartezustand versetzt, wenn er bedingtes Warten oder Schlafen aufruft.

Beendeter Zustand:

Die Beendigung von Threads erfolgt aus einem der folgenden Gründe.

  • Der normale Ausgang des Threads nach Abschluss der Ausführung der Codesegmente innerhalb des Threads.
  • Auftreten eines seltenen fehlerhaften Ereignisses wie einer nicht behandelten Ausnahme und eines Segmentierungsfehlers.

Ein Thread in einem beendeten Zustand verbraucht keine CPU-Zyklen.

Lernen Sie Softwareentwicklungskurse online von den besten Universitäten der Welt. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.

Gefragte Fähigkeiten in der Softwareentwicklung

JavaScript-Kurse Core-Java-Kurse Kurse zu Datenstrukturen
Node.js-Kurse SQL-Kurse Full-Stack-Entwicklungskurse
NFT-Kurse DevOps-Kurse Big-Data-Kurse
React.js-Kurse Cyber-Sicherheitskurse Cloud-Computing-Kurse
Datenbankdesign-Kurse Python-Kurse Kryptowährungskurse

Implementierung von Thread-Zuständen in Java:

Um den aktuellen Status eines Threads in Java zu ermitteln, verwenden wir die Methode Thread.getState(). Java bietet auch die Klasse java.lang.Thread.State an, in der die ENUM-Konstanten für den Zustand eines Threads definiert werden. Die Einzelheiten sind in der folgenden Tabelle zusammengefasst.

Konstanter Typ Erklärung Beschreibung
Neu public static final Thread.Zustand NEU Es ist der Thread-Zustand des Threads, der gerade erstellt wurde und dessen Ausführung noch beginnen muss.
Lauffähig public static final Thread.State AUSFÜHRBAR Es beschreibt den Status eines Threads, der bereits ausgeführt wird, oder eines Threads, der bereit zur Ausführung ist.

Derselbe Thread kann für die Java Virtual Machine in einem ausführbaren Zustand sein und auf andere Betriebssystemressourcen wie einen Prozessor warten.

verstopft öffentliches statisches Finale Thread.State BLOCKED Es beschreibt den Zustand eines blockierten Threads, der auf die Monitorsperre wartet. Es bleibt im selben Zustand, bis der Überwachungsblock in eine synchronisierte Methode/einen synchronisierten Block eintritt oder nach dem Aufrufen von Object.wait() erneut in die synchronisierte Methode eintritt.
Warten öffentliches statisches Finale Thread.State WAITING Es beschreibt den Zustand eines Threads, der aufgrund des Aufrufs einer der folgenden Methoden wartet.

  1. Object.wait ohne Timeout
  2. LockSupport.park
  3. Thread.join ohne Zeitüberschreitung

Der Wartezustand kann auf den Abschluss einer bestimmten Aufgabe durch einen anderen Thread zurückzuführen sein.

Zeitgesteuertes Warten öffentliches statisches letztes Thread.State TIMED_WAITING Es ist ein Zustand des Threads, der für eine bestimmte Zeit wartet. Der Aufruf einer der folgenden Methoden führt zu einem zeitgesteuerten Wartezustand eines Threads mit einer zugewiesenen positiven Wartezeit.

  1. Thread.join mit Zeitüberschreitung
  2. Object.wait mit Timeout
  3. LockSupport.partUntil
  4. LockSupport.parkNanos
Beendet öffentlich statisch final Thread.State TERMINATED Es ist der Zustand eines Threads, der die Ausführung seiner konstituierenden Codeanweisungen abgeschlossen hat.

Der Thread ruht in einem NEUEN Zustand, wenn er gerade erstellt wird. Wenn die .start()-Methode für einen Thread aufgerufen wird, wird sie vom Thread-Scheduler in einen Runnable-Zustand versetzt. Wenn die Methode join() für eine Threadinstanz aufgerufen wird, wartet der Thread, der die Codeanweisung gerade ausführt, auf die Beendigung dieses Threads. Vor dem Drucken der letzten Anweisung auf der Konsole wird also die Funktion join() auf Thread 2 durch das Programm aufgerufen und lässt Thread1 warten, bis Thread2 seine Ausführung abschließt und in den Zustand „Beendet“ übergeht. Da Thread1 auf den Abschluss der Ausführung von Thread2 wartet, wird er in den WAITING-Zustand versetzt.

Lesen Sie unsere beliebten Artikel zur Softwareentwicklung

Wie implementiert man Datenabstraktion in Java? Was ist die innere Klasse in Java? Java-Identifikatoren: Definition, Syntax und Beispiele
Verstehen der Kapselung in OOPS mit Beispielen Befehlszeilenargumente in C erklärt Top 10 Merkmale und Merkmale von Cloud Computing im Jahr 2022
Polymorphismus in Java: Konzepte, Typen, Eigenschaften und Beispiele Pakete in Java und wie man sie verwendet? Git-Tutorial für Anfänger: Lernen Sie Git von Grund auf neu

Vorteile und Einschränkungen der Verwendung von Threads in Java-Programmen:

Die Verwendung von Threads in Java-Programmen hat die folgenden Vorteile.

  • Reduzierung der Zeit, die für die Entwicklung des Codes benötigt wird
  • Reduzierte Wartungskosten
  • Verbesserte Leistung komplexer Anwendungen
  • Steigerung der Reaktionsfähigkeit der Benutzeroberflächen
  • Aufgaben parallelisieren
  • Threads werden in Serveranwendungen verwendet, um den hohen Durchsatz und die Nutzung von Ressourcen zu verbessern.
  • Wenn nicht alle Rechenressourcen der CPU von einem Thread verwendet werden können, werden diese durch die Ausführung eines anderen Threads belegt.
  • Wenn derselbe Datensatz von mehreren Threads bearbeitet wird, kann ihr Cache geteilt werden. Dies führt zu einer besseren Nutzung des Caches oder einer Harmonisierung seiner Werte.

Die Verwendung von Threads in Java-Programmen hat mehrere Nachteile. Einige davon sind unten aufgeführt.

  • Bei der gemeinsamen Nutzung von Caches, Translation Lookaside Buffers (TLBs) oder anderen Hardwareressourcen können sich mehrere Threads gegenseitig stören.
  • Selbst wenn nur ein einziger Thread arbeitet, kann die Ausführungszeit eines Threads nicht verlängert werden. Die Verschlechterung der Ausführungszeit ist jedoch zulässig. Dies kann an den zusätzlichen Pipeline-Stufen und/oder den langsameren Frequenzen liegen, die für die Unterbringung der Thread-Switching-Hardware erforderlich sind.
  • Zahlreiche Änderungen sind sowohl in den Betriebssystemen als auch in den Anwendungsprogrammen im Vergleich zum Multiprocessing erforderlich, da die Hardwareunterstützung beim Multithreading stärker der Software ausgesetzt ist.

Wenn Sie mehr über Java und Full-Stack-Softwareentwicklung erfahren möchten, schauen Sie sich das Executive PG-Programm in Softwareentwicklung von upGrad & IIIT-B an – Spezialisierung auf Full-Stack-Entwicklung, das für Berufstätige konzipiert ist und mehr als 500 Stunden strenge Schulungen bietet , 9+ Projekte und Aufgaben, IIIT-B Alumni-Status, praktische praktische Abschlussprojekte und Arbeitsunterstützung bei Top-Unternehmen.

Möchten Sie diesen Artikel teilen?

Bereiten Sie sich auf eine Karriere der Zukunft vor

Bewerben Sie sich jetzt für den Master in Software Engineering