Der Lebenszyklus eines Threads ist in mehrere Phasen unterteilt
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.
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:
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.
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.
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.
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.
1.等待I/O流的输入输出 2.等待网络资源,即网速问题 3.调用sleep()方法,需要等sleep时间结束 4.调用wait()方法,需要调用notify()唤醒线程 5.其他线程执行join()方法,当前线程则会阻塞,需要等其他线程执行完。
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();
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

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 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.

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 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.

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.

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

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

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.