一、线程的六种状态,如下图所示
二、六种状态介绍:
线程状态 | 具体含义 |
NEW | 一个尚未启动的线程的状态。也称之为初始状态、开始状态。线程刚被创建,但是并未启动。还没调用start方法。MyThread t = new MyThread()只有线程对象,没有线程特征。 |
RUNNABLE | 当我们调用线程对象的start方法,那么此时线程对象进入了RUNNABLE状态。那么此时才是真正的在JVM进程中创建了一个线程,线程一经启动并不是立即得到执行,线程的运行与否要听令与CPU的调度,那么我们把这个中间状态称之为可执行状态(RUNNABLE)也就是说它具备执行的资格,但是并没有真正的执行起来而是在等待CPU的调度。 |
BLOCKED | 当一个线程试图获取一个对象锁,而该对象锁被其他的线程持有,则该线程进入Blocked状态;当该线程持有锁时,该线程将变成Runnable状态。 |
WAITING | 一个正在等待的线程的状态。也称之为等待状态。造成线程等待的原因有两种,分别是调用Object.wait()、join()方法。处于等待状态的线程,正在等待其他线程去执行一个特定的操作。例如:因为wait()而等待的线程正在等待另一个线程去调用notify()或notifyAll();一个因为join()而等待的线程正在等待另一个线程结束。 |
TIMED_WAITING | 一个在限定时间内等待的线程的状态。也称之为限时等待状态。造成线程限时等待状态的原因有三种,分别是:Thread.sleep(long),Object.wait(long)、join(long)。 |
TERMINATED | 一个完全运行完成的线程的状态。也称之为终止状态、结束状态 |
三、线程状态转换
四、简化版
(一)NEW
一个尚未启动的线程的状态
MyThread t = new MyThread() 只有线程对象,没有线程特征
(二)RUNNABLE
当我们调用线程对象的 start 方法,那么此时线程对象进入了RUNNABLE状态,此时才是真正的在JVM进程中创建了一个线程。
它具备执行的资格,但是并没有真正的执行起来,而是在等待CPU的调度、
(三)BLOCKED
当一个线程试图获取一个对象锁,而该对象被其他的线程持有,则该进程进入BLOCKED状态。
当该线程持有锁时,该线程将变成RUNNABLE状态。
(四)WAITING
一个正在等待的线程的状态。
造成线程等待的原有有两种:Object.wait()、join()方法
① 因为 wait() 而等待的线程正在等待另一个线程去调用 notify() 或 notifyAll()
② 一个因为 join() 而等待的线程正在等待另一个线程结束。
(五)TIMED_WAITING
一个在限定时间内等待的线程的状态
造成线程等待的原因有三种:
① Thread.sleep(long)
② Object.wait(long)
③ join(long)
(六)TERMINATED
一个完全运行完成的状态
标签:状态,RUNNABLE,六种,long,线程,多线程,等待,wait From: https://www.cnblogs.com/Rover20230226/p/17342148.html