Heim > Java > javaLernprogramm > Einführung in den Lebenszyklus von Java-Threads (mit Beispielen)

Einführung in den Lebenszyklus von Java-Threads (mit Beispielen)

不言
Freigeben: 2019-04-13 10:01:09
nach vorne
6167 Leute haben es durchsucht

Dieser Artikel bietet Ihnen eine Einführung in den Lebenszyklus von Java-Threads (mit Beispielen). Freunde in Not können darauf verweisen.

1. Thread-Lebenszyklus

Prozesse haben wie Threads einen bestimmten Lebenszyklus. Der Lebenszyklus eines Threads umfasst vier Zustände: Erstellungszustand, Bereitschaftszustand, Blockierungszustand und Todeszustand . .

1. Erstellungsstatus

1) bezieht sich auf die Verwendung von new zum Instanziieren eines Thread-Objekts, aber das Thread-Objekt hat die start()-Methode noch nicht zum Starten des Threads verwendet Im Speicher wird Speicherplatz für die Instanzvariablen des Objekts im Heap zugewiesen, der Thread kann jedoch nicht daran teilnehmen, das Recht zur Nutzung der CPU zu erhalten.

2) Nachdem das Thread-Objekt erstellt wurde, wird die Methode start() verwendet wird zum Starten des Thread-Objekts verwendet, nicht der run()-Methode.

2. Der Bereitschaftszustand

1) bezieht sich auf die Phase von der Verwendung der start()-Methode bis zum Abschluss der Ausführung der run()-Methode. Sobald der Thread in die Bereitschaftsphase eintritt, Die Java Virtual Machine erstellt den Aufrufstapel und den Zähler der Methode für den Thread.

2) Innerhalb einer bestimmten Zeiteinheit (Zeitscheibe) kann die CPU nur einen Thread ausführen Um die CPU zu nutzen, kann dieser Thread auch als laufender Zustand bezeichnet werden. 3) Alle Threads im Bereitschaftszustand gelten als aktiv. Sie können die Methode isAlive() verwenden, um zu testen, ob sich der Thread im Zustand befindet Bereitzustand, und verwenden Sie activeCount(), um die aktuelle Anzahl der aktiven Threads im Thread-Pool abzufragen.

4) Der Thread im Bereitschaftszustand befindet sich nicht im laufenden Zustand Früher waren viele Computer Einzelprozessoren und alle Threads im Bereitschaftszustand mussten gleichzeitig ausgeführt werden. Es ist unmöglich, dass diese Threads die Nutzung des Prozessors teilen (z. B. Zeitscheibe). Rotationsalgorithmus, exklusiver Algorithmus usw.).

3. Blockierungszustand:


1) Der Blockierungszustand umfasst vier Zustände (Ruhezustand, Blockierungszustand, Suspendierungszustand, Wartezustand). Der Bereitschaftszustand kann untereinander umgeschaltet werden.

2) Verwenden Sie die Methode „sleep()“, um den Thread in den Ruhezustand zu versetzen, sodass andere Prozesse ausgeführt werden können. Die Verwendung der Methode „sleep“ muss jedoch die InterruptedExecption erfassen Ausnahme;

3) Verwenden Sie die Suspend-Methode, um den Thread anzuhalten (veraltet nach jdk1.2), verwenden Sie die Wait-Methode, um den Thread in den Wartezustand zu versetzen (es wird später ein Aufsatz dazu geben), und verwenden Sie den E/A-Interrupt, um den Thread in den Blockierungszustand zu versetzen.

4. Todeszustand:

1) Sobald der Thread die Ausführung der Ausführungsmethode beendet hat, wechselt der Thread in den Todeszustand und die Java Virtual Machine zerstört die vom Thread-Objekt belegten Systemressourcen der Todeszustand;

2) Wenn der Thread während der Ausführung auf eine nicht abgefangene Ausnahme stößt, wird der Thread beendet und geht in den Todeszustand über kann leicht einen Deadlock verursachen und ist veraltet.

5. Der Thread-Lebenszyklus ist wie folgt:

2. Das Folgende ist ein Fall, in dem die Schlafmethode das setzt Thread in den Ruhezustand

/**
 * @author: PrincessHug
 * @date: 2019/4/12, 9:20
 * @Blog: https://www.cnblogs.com/HelloBigTable/
 */
public class SleepDemo  implements Runnable{
    @Override
    public void run() {
        long l;
        for (int i=1;i<6;i++){
            l = System.currentTimeMillis();
            try {
                Thread.currentThread().sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            l = (System.currentTimeMillis() - l);
            System.out.println(Thread.currentThread().getName() + "线程执行了" + i + "次,耗时" + l + "毫秒。");
        }
    }
}
public class SleepDriver {
    public static void main(String[] args) {
        SleepDemo sd = new SleepDemo();
        for (int i=0;i<50;i++){
            new Thread(sd,i + "#").start();
        }
    }
}
Nach dem Login kopieren

Im Folgenden finden Sie einige Screenshots der laufenden Ergebnisse:

Sie können gleichzeitig sehen, dass jeder Thread umso länger dauert, je mehr Threads gestartet werden.

Das obige ist der detaillierte Inhalt vonEinführung in den Lebenszyklus von Java-Threads (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage