这篇文章主要讲解了“Java线程的状态有哪几种”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java线程的状态有哪几种”吧!
站在用户的角度思考问题,与客户深入沟通,找到甘南网站设计与甘南网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、网站设计、企业官网、英文网站、手机端网站、网站推广、申请域名、网络空间、企业邮箱。业务覆盖甘南地区。
Java 线程状态转换图
Java 线程状态
在 Java 线程的生命周期中,按复杂的并发场景考虑,可将 Java 线程的状态分为七种,分别是:新建,可运行,运行,无限期等待,限期等待,阻塞,结束。
新创建一个线程对象,尚未执行。
2. 可运行(Runnable 或 Ready)状态
新创建的线程调用 start 方法后便处于 Runnable 状态,刚刚结束等待(获取到锁)或阻塞状态的线程也会处于 Runnable 状态,处于该状态的线程位于可运行线程池中,等待获取 CPU 资源。
处于 Runnable 状态的线程获取到 CPU 资源,执行程序代码。
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)状态。
线程 run 方法执行完毕或者异常退出,则该线程的生命周期终结,不能再次使用。
感谢各位的阅读,以上就是“Java线程的状态有哪几种”的内容了,经过本文的学习后,相信大家对Java线程的状态有哪几种这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!