Java线程的七种状态

前言:
本文简单介绍一下Java线程的七种状态

Java线程有7种状态,分别是:

1. 新建状态(new)

(1)使用new操作符新创建的一个线程对象,例如new Thread();
(2)处于新建状态的线程,内部的任务代码还没开始运行.

2. 可执行/就绪状态(Runnable)

(1)新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当调用了线程对象的start()方法即启动了线程,此时线程就处于就绪状态;
(2)处于就绪状态的线程并不一定立即运行run()方法,线程还必须==同其他就绪线程竞争CPU==,只有==获得CPU使用权才可以运行线程==;
(3)线程阻塞状态(Blocked)结束后也可以变成就绪状态,或从运行状态(Running)变化到就绪状态.

3. 运行状态(Running)

(1)线程获取到CPU使用权进行执行;
(2)需要注意的是,==线程只能从就绪状态进入到运行状态==,真正开始执行run()方法的内容.

4. 阻塞状态(Blocked)

(1)线程在获取锁失败时(因为锁被其它线程抢占),它会被加入锁的同步阻塞队列,然后线程进入阻塞状态(Blocked);
(2)待其它线程释放锁之后,阻塞状态(Blocked)的线程将在次参与锁的竞争,如果==竞争锁成功==,==线程将进入就绪状态==(Runnable),之后才有机会转到运行状态(Running).

5. 等待状态(Waiting)

(1)线程执行wait()方法,JVM会把该线程放入等待队列(waitting queue)中,进入等待状态;
(2)处于等待状态的线程将不会被CPU执行,除非线程的运行条件得到满足后,其==可被其他线程唤醒==,进入阻塞状态(Blocked);
(3)调用不带超时的Thread.join()方法也会进入等待状态.

6. 睡眠(Sleep)

(1)睡眠是等待状态的一种特例,在调用Thread.sleep()方法,带有超时设定的Object.wait()方法,带有超时设定的Thread.join()方法等,线程会进入睡眠状态(Sleep);
(2)睡眠状态进程达到设置时间的等待时间后,睡眠线程将==自动唤醒进入阻塞状态==(Blocked)或就绪状态(Runnable).

7. 死亡(Dead)

(1)线程执行完了或者因异常退出了run()方法,该线程结束生命周期,死亡的线程==不可再次复生==.

参考文档

1.https://baijiahao.baidu.com/s?id=1626410873162104506&wfr=spider&for=pc

—— 感谢您的阅读 ( ゚∀゚) 有什么疑问可以在下方留言哦 ——
坚持原创技术分享,您的支持将鼓励我继续创作!