Heim  >  Artikel  >  Java  >  Thread-Lebenszyklus in Java

Thread-Lebenszyklus in Java

WBOY
WBOYOriginal
2024-08-30 16:19:57480Durchsuche

Ein Thread durchläuft im Lebenszyklus zahlreiche Phasen. Zum Beispiel kommt ein Faden in die Welt, beginnt, läuft und vergeht danach. Das nachfolgende Diagramm erläutert den kompletten Lebenszyklus des Threads.

Thread-Lebenszyklus in Java

Starten Sie Ihren kostenlosen Softwareentwicklungskurs

Webentwicklung, Programmiersprachen, Softwaretests und andere

  • Thread Constructor erzeugt einen Thread durch einen neuen Zustand.
  • Durch Aufrufen der Methode „begin“ in Thread kann der ausführbare Zustand erreicht werden.
  • Der Thread-Scheduler für Java führt diesen Thread aus, wenn der Prozessor ihn empfängt.
  • Wenn der Thread in einen blockierten Zustand wechselt, wird er erneut ausgeführt, da er wieder in einen ausführbaren Zustand zurückkehrt.
  • Wenn die Wartemethode als Thread bezeichnet wird, der in den Status „Warten auf den Zustand“ übergeht, geht sie in einen ausführbaren Zustand über, sobald sie während der „Inform“-Methode zu einer Benachrichtigung und einer „Alle benachrichtigen“-Methode wird.
  • Der Thread endet, sobald die Ausführungsmethode beendet wird.

Was ist Thread?

Ein Thread wird auf Betriebssystemebene definiert. Und die Java-Sprache sowie alle anderen verwendeten Sprachen nutzen den Dienst, den das Betriebssystem bietet. Aus der Sicht des Entwicklers ist ein Thread eine Reihe von Anweisungen, die wir für unsere Anwendung schreiben und auf eine bestimmte Weise ausführen. Eine Anwendung selbst kann aus mehreren Threads bestehen. Verschiedene Threads können gleichzeitig ausgeführt werden. Die JVM (Java Virtual Machine) arbeitet mit mehreren Threads. Es gibt Threads für die Garbage Collection. Es gibt Threads für den Just-in-Time-Compiler und andere technische Threads.

Zustände des Thread-Lebenszyklus in Java

Unten sind die verschiedenen Zustände des Thread-Lebenszyklus in Java aufgeführt:

1. Neu: Ein neuer Thread beginnt seinen Lebenszyklus im neuen Zustand. Es verbleibt in diesem Zustand, bevor das Programm den Thread beginnt. Darüber hinaus wird es als erstellter Thread bezeichnet.

2. Ausführbar: Nachdem ein kürzlich erstellter Thread beginnen kann, wird der Thread ausführbar. Ein Thread mit diesem Status wird als seinen Prozess ausführend betrachtet.

3. Warten: Gelegentlich geht ein Thread in den Status „Warten“ über, obwohl der Thread darauf wartet, dass ein anderer Thread eine Aktivität ausführt. Ein Thread-Übergang in den ausführbaren Zustand erfolgt nur dann, wenn ein zusätzlicher Thread den wartenden Thread angibt, die Ausführung fortzusetzen.

4. Zeitgesteuertes Warten: Ein ausführbarer Thread kann problemlos das bestimmte zeitgesteuerte Warten darauf durchführen, dass der Status ein bestimmtes Zeitintervall erreicht. Ein Thread mit diesem Status wechselt in den ausführbaren Status zurück, sobald dieses Punktintervall abläuft oder wenn das Ereignis eintritt, auf das er wirklich wartet.

5. Beendet: Ein ausführbarer Thread gelangt in den beendeten Zustand, weil er seine Aufgabe erfüllt oder andernfalls beendet wird.

Wie erstelle ich einen Thread in Java?

Die einfachste Möglichkeit, einen Thread in Java zu erstellen, ist die Verwendung des Runnable Pattern. Zuerst müssen Sie eine Instanz der Runnable-Schnittstelle erstellen, was sehr einfach ist; Es gibt nur eine Methode zur Implementierung. Dann übergeben wir diese Instanz an den Konstruktor der Thread-Klasse. Und dann rufen wir einfach die start()-Methode dieses erstellten Thread-Objekts auf, um einen neuen Thread zu starten, der die in unserem Runnable-Objekt eingeschlossene Aufgabe ausführen wird.

Thread-Lebenszyklus in Java

Also erstellen wir zunächst eine Instanz eines Runnable.  Es muss nur eine Methode implementiert werden, die als run()-Methode bezeichnet wird. Dies ist das Java 7-Muster dafür, mit einer Instanz einer anonymen Klasse. Wir können aber auch einen Lambda-Ausdruck verwenden, um ein Runnable zu implementieren, da es in der Runnable-Schnittstelle nur eine Methode gibt.

Thread-Lebenszyklus in Java

Lassen Sie uns Threads zu ganz einfachen Beispielen erstellen.

Wir werden sehen, was bei einer Race-Bedingung mit nicht synchronisiertem Code, der synchronisiert werden sollte, schief gehen kann, und wir werden unseren Code mithilfe der Synchronisierung reparieren. Dieses erste Beispiel ist sehr einfach; es ist sehr einfach. Es geht nur darum, eine Aufgabe zu erstellen.

Thread-Lebenszyklus in Java

Ausgabe:

Thread-Lebenszyklus in Java

Eine Aufgabe ist eine Instanz der Runnable-Schnittstelle. Nennen wir sie runnable, und wir können diese Schnittstelle mithilfe eines Lambda-Ausdrucks implementieren. Diese Aufgabe wird einem neuen Thread übergeben und im Kontext dieses Threads ausgeführt. Wir geben also einfach den Namen des Threads aus, der diese Aufgabe ausführt. Ich laufe in… Thread.currentThread() ist eine statische Methode der Thread-Klasse, die den Thread zurückgibt, der die aktuelle Aufgabe ausführt. Und wir müssen nur getName() für dieses Thread-Objekt aufrufen, um den Namen eines Threads zurückzugeben. Nachdem wir dann eine Thread-Instanz erstellt haben, ist t = new Thread.  Übergabe dieser ausführbaren Datei als Parameter. Dieser Thread wird also diesen Code ausführen. Und es zu starten. t.start() Dies ist die start()-Methode, die wir aufrufen müssen. Wir können diesem Thread auch einen expliziten Namen geben, indem wir t.setName(“Mein Thread”) verwenden. Und jetzt können wir diesen Code ausführen. Anstelle der Methode „call start()“ rufen wir nun die Methode „run()“ auf. Wenn wir diesen Code ausführen, besteht das Problem darin, dass die Aufgabe korrekt ausgeführt wird, sie jedoch nicht in dem von uns erstellten Thread ausgeführt wird. Die Ausführung erfolgt im Hauptthread, also dem Thread, der die Hauptmethode ausführt. Daher sollte diese run()-Methode nicht aufgerufen werden, wenn wir einen neuen Thread starten möchten.

Thread-Lebenszyklus in Java

Ausgabe:

Thread-Lebenszyklus in Java

Methoden des Thread-Lebenszyklus in Java

Die von simply Thread beschriebenen Methoden sind in der Tabelle dargestellt.

Data Types Thread Method Names
String

getName()

Return this thread’s name

int get priority()

Returns the thread’s priority

boolean isAlive()

Tests if this thread is still running

void join()

Waits for this thread to die (terminate)

void run()

Whenever this thread was built utilizing an individual Runnable object, which usually Runnable object’s run method is called, this method will do nothing and returns. Whenever thread class can be extended and run() method is over-ridden during sub-class, then an over-ridden run() method is called.

void setName(String name)

Alterations the name with this thread to become comparable to the argument name.

static void

 

 

sleep(long millis) throws Interrupted/Exception
It causes the presently performing thread to rest for
the required quantity of milliseconds.
static void sleep(long millis, int Nanos) throws InterruptedException

It causes the presently performing thread to sleep (cease execution) for the required quantity of milliseconds as well as the particular quantity of nanoseconds.

void start()

Triggers these threads to start execution; the Java Virtual Machine calls the run method of that thread.

static void yield()

Triggers the presently thread object to pause and permit additional threads to execute briefly.

static Thread currentThread()

Returns a mention of the presently executing thread object.

Datentypen

Thread-Methodennamen
    String

  • getName()
  • Gibt den Namen dieses Threads zurück

  • int
  • Priorität abrufen()
  • Gibt die Priorität des Threads zurück
    boolean isAlive() Testet, ob dieser Thread noch läuft
    leer join() Wartet darauf, dass dieser Thread stirbt (beendet)
    leer run() Immer wenn dieser Thread unter Verwendung eines einzelnen Runnable-Objekts erstellt wurde, das normalerweise als run-Methode des Runnable-Objekts bezeichnet wird, führt diese Methode nichts aus und kehrt zurück. Immer wenn die Thread-Klasse erweitert werden kann und die run()-Methode während der Unterklasse überschrieben wird, wird eine überschriebene run()-Methode aufgerufen.
    leer setName(String name) Ändert den Namen dieses Threads, um ihn mit dem Argumentnamen vergleichbar zu machen.
    statische Leere     sleep(long millis) wirft Interrupted/Exception
    Dies führt dazu, dass der aktuell ausgeführte Thread für
    ruht die erforderliche Menge an Millisekunden.
    statische Leere sleep(long millis, int Nanos) wirft InterruptedException Es bewirkt, dass der aktuell ausgeführte Thread für die erforderliche Menge an Millisekunden und die bestimmte Menge an Nanosekunden in den Ruhezustand versetzt (die Ausführung anhält).
    leer start() Triggert, dass diese Threads mit der Ausführung beginnen; Die Java Virtual Machine ruft die Ausführungsmethode dieses Threads auf.
    statische Leere Yield() Löst das aktuelle Thread-Objekt an, um eine kurze Ausführung zusätzlicher Threads zu ermöglichen.
    statischer Thread currentThread() Gibt eine Erwähnung des aktuell ausgeführten Thread-Objekts zurück.
    Fazit Einfacher Einstieg in die Verwendung von Threads, extrem schwer zu verstehen. Das Entwerfen von Klassen, die Thread-sichere Methoden enthalten, ist eine Herausforderung. Lesen Sie: JavaDoc, um die Klasse java.lang.Thread zu erhalten

    Das obige ist der detaillierte Inhalt vonThread-Lebenszyklus in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Vorheriger Artikel:Struts in JavaNächster Artikel:Struts in Java