Java线程的状态有哪几种

这篇文章主要讲解了“Java线程的状态有哪几种”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java线程的状态有哪几种”吧!



Java 线程状态转换图


Java线程的状态有哪几种

Java 线程状态


在 Java 线程的生命周期中,按复杂的并发场景考虑,可将 Java 线程的状态分为七种,分别是:新建,可运行,运行,无限期等待,限期等待,阻塞,结束。

 1. 新建(New)状态

新创建一个线程对象,尚未执行。

2. 可运行(Runnable 或 Ready)状态

新创建的线程调用 start 方法后便处于 Runnable 状态,刚刚结束等待(获取到锁)或阻塞状态的线程也会处于 Runnable 状态,处于该状态的线程位于可运行线程池中,等待获取 CPU 资源。

 3. 运行(Running)状态

处于 Runnable 状态的线程获取到 CPU 资源,执行程序代码。

 4. 无限期等待(Waiting)状态

synchronized 代码块内被锁住的对象调用了它的 wait() 方法或者在当前线程中调用了其他线程的 join() 方法,那么当前线程将会释放占有的锁,释放 CPU 资源,阻塞在等待队列里面,一直等待被 synchronized 修饰的对象调用 notify() 或 notifyAll() 方法唤醒或者 join 的其他线程执行结束(异常退出)。在并发时,处于无限期等待状态的线程被唤醒之后,还要去竞争对象的锁,如果竞争不到,线程将会被阻塞在对象的锁池中,竞争到锁之后,线程将会处于 Runnable 状态。

5. 限期等待(Timed Waiting)状态

与无限期等待(Waiting)状态不同之处在于,调用 wait 和 join 方法时传入了等待限定时间。另外,线程调用 sleep() 方法也会处于限期等待(Timed Waiting)状态,会释放 CPU 资源,但并不会释放锁,一直到休眠结束变成 Runnable 状态。

6. 阻塞(Blocked)状态

线程程序执行到 synchronized 代码块或 Reentrant.lock() 方法,对象的锁被其他线程占用时,当前线程将会被阻塞在对象的锁池中,处于阻塞(Blocked)状态。

 7. 结束(Terminated)状态

线程 run 方法执行完毕或者异常退出,则该线程的生命周期终结,不能再次使用。


感谢各位的阅读,以上就是“Java线程的状态有哪几种”的内容了,经过本文的学习后,相信大家对Java线程的状态有哪几种这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。