多线程 —— 线程的六种状态

① NEW(新建状态)  ② RUNNABLE(可运行状态)  ③ BLOCKED(阻塞状态)

④ WAITING(等待状态)  ⑤ TIMED_WAITING(定时等待状态)  ⑥ TERMINATED(终止状态)


 

一、线程的六种状态,如下图所示

 

二、六种状态介绍:

线程状态 具体含义
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

  一个完全运行完成的状态

posted @   青核桃啊  阅读(616)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示