Heim häufiges Problem Der Lebenszyklus eines Threads ist in mehrere Phasen unterteilt

Der Lebenszyklus eines Threads ist in mehrere Phasen unterteilt

Feb 21, 2023 pm 04:24 PM
线程 生命周期

5 Stufen: 1. Neu, das ist der Thread, der gerade mit der neuen Methode erstellt wurde; 2. Bereit, das ist nach dem Aufruf der start()-Methode des Threads. Zu diesem Zeitpunkt befindet sich der Thread in der Stufe 3. Der Thread wird ausgeführt, wenn er geplant ist und CPU-Ressourcen erhält. Im laufenden Zustand kann der Thread blockiert werden einige Gründe; 5. Zerstörung, der Thread wird normal ausgeführt. Nach Abschluss oder wenn der Thread vorzeitig beendet wird oder eine Ausnahme auftritt, wird der Thread zerstört.

Der Lebenszyklus eines Threads ist in mehrere Phasen unterteilt

Die Betriebsumgebung dieses Tutorials: Windows 7-System, Dell G3-Computer.

Der Lebenszyklus eines Threads umfasst 5 Phasen, darunter: neu, bereit, ausgeführt, blockiert und zerstört. Das vollständige Lebenszyklusdiagramm sieht wie folgt aus:

Der Lebenszyklus eines Threads ist in mehrere Phasen unterteilt

Wenn ein Thread in den Betriebszustand wechselt, verwendet das allgemeine Betriebssystem eine präventive Methode, damit der Thread die CPU erhalten kann. Daher muss die CPU zwischen mehreren Threads wechseln, sodass der Thread-Status mehrmals zwischen „Laufend“, „Blockiert“ und „Bereit“ wechselt.

1. Neu (neu)

Neu: Mit der neuen Methode kommt zu diesem Zeitpunkt nur die virtuelle JAVA-Maschine dafür Speicher zu und initialisiert die Werte ​​​von Mitgliedsvariablen. Es ist derzeit nur ein Objekt.

2. Bereit (ausführbar)

Bereit: Nach dem Aufruf der start()-Methode des Threads wartet der Thread zu diesem Zeitpunkt darauf, dass die CPU Ressourcen zuweist. Wer zuerst die CPU-Ressourcen ergreift, wird gewinnen.
Der Thread geht in den Bereitschaftszustand über. Die virtuelle JAVA-Maschine erstellt einen Methodenaufrufstapel und einen Programmzähler dafür. Die Ausführung von Threads wird von der zugrunde liegenden Plattform gesteuert und weist einen gewissen Grad an Zufälligkeit auf.

3. Running

Running: Wenn der Ready-Thread geplant ist und CPU-Ressourcen erhält, wechselt er in den Running-Status Der Thread im Bereitschaftszustand erhält die CPU und führt die run()-Methode aus. Bei einer Single-Core-CPU (oder einem Kern) kann er nur eine Anweisung gleichzeitig ausführen, und die JVM erreicht Multithreading durch schnelles Umschalten der Threads zur Ausführung von Anweisungen. Ja, ein echter Prozessor kann eine Anweisung gleichzeitig verarbeiten, aber diese Umschaltgeschwindigkeit ist so hoch, dass wir es überhaupt nicht bemerken. Um die korrekte Ausführungsposition nach dem Threadwechsel wiederherzustellen, verfügt jeder Thread über einen unabhängigen Programmzähler. Die Zähler zwischen den einzelnen Threads beeinflussen sich nicht gegenseitig und werden unabhängig voneinander gespeichert.
Wenn ein Thread ausgeführt wird, kann er die CPU nicht die ganze Zeit über beanspruchen (es sei denn, der Ausführungskörper des Threads ist sehr kurz und die Ausführung endet sofort). Daher muss der Thread während der Ausführung unterbrochen werden, damit andere Threads zur Ausführung auf die CPU zugreifen können. Die Details der Thread-Planung hängen von der Strategie der zugrunde liegenden Plattform ab.

4. Blockiert

Blockiert: Im laufenden Zustand kann der Thread aus bestimmten Gründen blockiert werden. Die Gründe sind wie folgt:

1.等待I/O流的输入输出
2.等待网络资源,即网速问题
3.调用sleep()方法,需要等sleep时间结束
4.调用wait()方法,需要调用notify()唤醒线程
5.其他线程执行join()方法,当前线程则会阻塞,需要等其他线程执行完。
Nach dem Login kopieren
Das Statuswechseldiagramm lautet wie folgt:


Der Lebenszyklus eines Threads ist in mehrere Phasen unterteilt

5. Zerstört (beendet)

Wenn der Thread die normale Ausführung abschließt oder der Thread zwangsweise beendet wird Wenn ein Fortschritt auftritt oder eine Ausnahme auftritt, wird er beendet. Dann wird der Thread zerstört und die Ressourcen werden freigegeben.

1. Die run()/call()-Methode wird ausgeführt und der Thread endet normal.

2. Der Thread löst eine nicht abgefangene Ausnahme oder einen Fehler aus. 3. Rufen Sie direkt die stop()-Methode des Threads auf - Diese Methode kann leicht zu einem Deadlock führen und wird im Allgemeinen nicht empfohlen.

Erweitertes Wissen: CPU-Zeitscheibe Auf Betriebssystemebene gibt es einen Quarzoszillator, der ein bisschen wie ein Mönch ist, der immer wieder auf die Uhr klopft, sie immer wieder kurz schlägt und die Zeit aufteilt Die CPU-Zeit wird in eine Zeitscheibe umgewandelt. Jeder Thread greift tatsächlich nacheinander auf Zeitscheiben zu eigene Logik; Fairness)

Neuer Zustand

Schauen wir uns den folgenden Code an:

Thread t1 = new Thread();
Nach dem Login kopieren

Die Erstellung erfolgt hier nur auf der Programmiersprachenebene von JAVA, aber auf der Betriebssystemebene hat der eigentliche Thread noch nicht erstellt. Erst wenn wir die start()-Methode aufrufen, wird der Thread erstellt und wechselt in den Runnable-Status. Erst wenn wir die Methode start() aufrufen, wird der Thread erstellt

Weitere Informationen zu diesem Thema finden Sie in der Spalte „FAQ

“!

Das obige ist der detaillierte Inhalt vonDer Lebenszyklus eines Threads ist in mehrere Phasen unterteilt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was bedeuten 8 Kerne und 16 Threads? Was bedeuten 8 Kerne und 16 Threads? Feb 02, 2023 am 11:26 AM

8-Kern bedeutet, dass die CPU über 8 physische Kerne verfügt, und 16-Thread bedeutet, dass die CPU bis zu 16 Threads gleichzeitig ausführen kann. Die Anzahl der Kerne und Threads sind wichtige Leistungsindikatoren einer Computer-CPU. Je höher die Anzahl der Kerne der CPU, desto höher die Anzahl der Threads und desto günstiger die gleichzeitige Ausführung mehrerer Programme. weil die Anzahl der Threads der Anzahl entspricht, die die CPU zu einem bestimmten Zeitpunkt gleichzeitig ausführen kann. Die Anzahl der parallel zu verarbeitenden Aufgaben. Multithreading kann die superskalare Verarbeitung mit großen Problemen außerhalb der Reihenfolge maximieren, die Auslastung von Prozessor-Rechnerkomponenten verbessern und Verzögerungen beim Speicherzugriff verringern, die durch Datenkorrelation oder Cache-Fehler verursacht werden.

vue3 hat mehrere Lebenszyklusfunktionen geändert vue3 hat mehrere Lebenszyklusfunktionen geändert Jan 13, 2023 pm 05:57 PM

vue3 hat 4 Lebenszyklusfunktionen geändert. Die kombinierte Vue3-API bricht die Hook-Funktionen „beforeCreated“ und „created“ ab und verwendet stattdessen den Step-Hook, der darin nicht verwendet werden kann. Die Hook-Funktionen für die Komponentenzerstörung in Vue3 wurden von destroy und beforeDestroy in beforeUnmount und unmount geändert.

Wie gehe ich mit der Zerstörung und dem Lebenszyklusmanagement von C++-Funktionszeigern um? Wie gehe ich mit der Zerstörung und dem Lebenszyklusmanagement von C++-Funktionszeigern um? Apr 17, 2024 pm 05:48 PM

In C++ erfordern Funktionszeiger eine ordnungsgemäße Zerstörung und Lebenszyklusverwaltung. Dies kann erreicht werden, indem der Funktionszeiger manuell zerstört und der Speicher freigegeben wird. Verwenden Sie intelligente Zeiger wie std::unique_ptr oder std::shared_ptr, um den Lebenszyklus von Funktionszeigern automatisch zu verwalten. Binden Sie den Funktionszeiger an das Objekt, und der Objektlebenszyklus verwaltet die Zerstörung des Funktionszeigers. Bei der GUI-Programmierung stellt die Verwendung intelligenter Zeiger oder die Bindung an Objekte sicher, dass Rückruffunktionen zum richtigen Zeitpunkt zerstört werden, wodurch Speicherlecks und Inkonsistenzen vermieden werden.

Der Servlet-Lebenszyklus ist in mehrere Phasen unterteilt Der Servlet-Lebenszyklus ist in mehrere Phasen unterteilt Feb 23, 2023 pm 01:46 PM

Der Servlet-Lebenszyklus bezieht sich auf den gesamten Prozess von der Erstellung bis zur Zerstörung eines Servlets, der in drei Phasen unterteilt werden kann: 1. Initialisierungsphase, Aufruf der init()-Methode, um das Servlet zu initialisieren; 2. Ausführungsphase (Verarbeitungsanforderungen); Der Container fordert die Erstellung eines ServletRequest-Objekts an, das eine HTTP-Anfrage darstellt, und eines ServletResponse-Objekts, das eine HTTP-Antwort darstellt, und übergibt sie dann als Parameter an die service()-Methode des Servlets. 3. Zerstörungsphase.

Gleichzeitige C++-Programmierung: Wie vermeidet man Thread-Aushungerung und Prioritätsumkehr? Gleichzeitige C++-Programmierung: Wie vermeidet man Thread-Aushungerung und Prioritätsumkehr? May 06, 2024 pm 05:27 PM

Um Thread-Aushunger zu vermeiden, können Sie faire Sperren verwenden, um eine faire Zuweisung von Ressourcen sicherzustellen, oder Thread-Prioritäten festlegen. Um die Prioritätsumkehr zu lösen, können Sie die Prioritätsvererbung verwenden, um die Priorität des Threads, der die Ressource enthält, vorübergehend zu erhöhen, oder die Sperrenerhöhung verwenden, um die Priorität des Threads zu erhöhen, der die Ressource benötigt.

Lebenszyklusfunktionen in Vue3: Beherrschen Sie schnell den Lebenszyklus von Vue3 Lebenszyklusfunktionen in Vue3: Beherrschen Sie schnell den Lebenszyklus von Vue3 Jun 18, 2023 am 08:20 AM

Vue3 ist derzeit eines der beliebtesten Frameworks in der Front-End-Welt, und die Lebenszyklusfunktion von Vue3 ist ein sehr wichtiger Teil von Vue3. Die Lebenszyklusfunktion von Vue3 ermöglicht es uns, bestimmte Ereignisse zu bestimmten Zeiten auszulösen und so den hohen Grad der Steuerbarkeit von Komponenten zu verbessern. In diesem Artikel werden die Grundkonzepte der Lebenszyklusfunktionen von Vue3, die Rollen und Verwendung jeder Lebenszyklusfunktion sowie Implementierungsfälle im Detail untersucht und erläutert, um den Lesern zu helfen, die Lebenszyklusfunktionen von Vue3 schnell zu beherrschen. 1. Die Lebenszyklusfunktion von Vue3

Was sind die Lebenszyklen von vue3? Was sind die Lebenszyklen von vue3? Feb 01, 2024 pm 04:33 PM

vue3-Funktionen: 1、beforeCreate;2、created;3、beforeMount;4、mounted;5、beforeUpdate;6、updated;7、beforeDestroy;8、destroyed;9、activated;10、deactivated;11、error Captured;12 、getDerivedStateFromProps-Funktion

Wie kann der Lebenszyklus von Golang-Coroutinen gesteuert werden? Wie kann der Lebenszyklus von Golang-Coroutinen gesteuert werden? May 31, 2024 pm 06:05 PM

Der Lebenszyklus der Go-Coroutine kann auf folgende Weise gesteuert werden: Erstellen Sie eine Coroutine: Verwenden Sie das Schlüsselwort go, um eine neue Aufgabe zu starten. Coroutinen beenden: Warten Sie, bis alle Coroutinen abgeschlossen sind, und verwenden Sie sync.WaitGroup. Verwenden Sie Kanalschließsignale. Verwenden Sie context context.Context.