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.
Starten Sie Ihren kostenlosen Softwareentwicklungskurs
Webentwicklung, Programmiersprachen, Softwaretests und andere
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.
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.
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.
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.
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.
Ausgabe:
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.
Ausgabe:
Die von simply Thread beschriebenen Methoden sind in der Tabelle dargestellt.
|
Thread-Methodennamen |
||||||||||||||||||||||||
String |
Gibt den Namen dieses Threads zurück |
||||||||||||||||||||||||
int |
|
||||||||||||||||||||||||
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. |
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!