Java中的線程生命周期 – Java中的線程狀態

了解Java中的线程生命周期和线程状态在使用线程和编程多线程环境时非常重要。从上一个教程中,我们可以通过实现Runnable接口或继承Thread类来创建一个Java线程类,但要启动一个Java线程,我们首先必须创建Thread对象并调用它的start()方法来执行run()方法作为一个线程。

Java中的线程生命周期

下图显示了Java中线程生命周期的不同状态。我们可以在Java中创建一个线程并启动它,但线程状态从可运行到运行到阻塞的变化取决于操作系统对线程调度器的实现,Java对此没有完全控制。

新建

當我們使用new運算子創建一個新的Thread物件時,線程的狀態是New Thread。此時,線程還未啟動並且是Java編程內部的一個狀態。

Runnable

當我們在Thread物件上調用start()函數時,它的狀態會變為Runnable。控制權交給線程調度器來完成執行。是否立即運行此線程或在運行之前將其保留在可運行線程池中,取決於操作系統對線程調度器的實現。

Running

線程正在執行時,它的狀態會變為Running。線程調度器從可運行線程池中選擇一個線程並將其狀態更改為Running。然後CPU開始執行此線程。線程可以從運行狀態變為Runnable、Dead或Blocked,這取決於時間片分配、run()方法完成或等待某些資源。

Blocked/Waiting

A thread can be waiting for other thread to finish using thread join or it can be waiting for some resources to available. For example producer consumer problem or waiter notifier implementation or IO resources, then it’s state is changed to Waiting. Once the thread wait state is over, it’s state is changed to Runnable and it’s moved back to runnable thread pool.

Dead

一旦執行緒執行完成,其狀態就會變為Dead,並且被視為不活躍。以上是執行緒的不同狀態。了解這些狀態以及執行緒如何改變狀態是很重要的。這就是Java中執行緒的生命週期的全部內容。

Source:
https://www.digitalocean.com/community/tutorials/thread-life-cycle-in-java-thread-states-in-java