Heim >häufiges Problem >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()方法,当前线程则会阻塞,需要等其他线程执行完。Das Statuswechseldiagramm lautet wie folgt:
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!