Java线程状态
发布日期:2021-05-06 20:00:18 浏览次数:20 分类:精选文章

本文共 1017 字,大约阅读时间需要 3 分钟。

JAVA线程状态


在这里插入图片描述

1. 新建( new ):创建新的线程对象。

创建的方式有3种:继承Thread类与实现Runnable接口,还可以通过线程池创建。

2. 可运行( runnable ):线程对象创建后,其他线程(比如 main 线程)调用了该对象 的 start ()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取 cpu 的使用权 。

调用Thread类中的start (),该方法为同步方法

3. 运行( running ):可运行状态( runnable )的线程获得了 cpu 时间片( timeslice ) ,执行程序代码。

调用Thread类中的run ()方法后,线程才是真正的执行

4. 阻塞( block ):阻塞状态是指线程因为某种原因放弃了 cpu 使用权,也即让出了 cpu timeslice ,暂时停止运行。直到线程进入可运行( runnable )状态,才有 机会再次获得 cpu timeslice 转到运行( running )状态。阻塞的情况分三种:

  • 等待阻塞:运行( running )的线程执行 wait ()方法, JVM 会把该线程放 入等待队列( waitting queue )中。
调用Object中的wait方法
  • 同步阻塞:运行( running )的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则 JVM 会把该线程放入锁池( lock pool )中。
用synchronized进行修饰,注意同步方法和同步代码块的一些区别。同步方法默认用this或者当前类class对象作为锁; 同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法。
  • 其他阻塞: 运行( running )的线程执行sleep方法或 join 方法,或者发出了 I / O 请求时, JVM 会把该线程置为阻塞状态。 当 sleep ()状态超时、 join ()等待线程终止或者超时、或者 I / O 处理完毕时,线程重新转入可运行( runnable )状态。
调用Thread .sleep ( long ms )或者Thread类中的join方法

5. 死亡( dead ):线程 run ()、 main () 方法执行结束,或者因异常退出了 run ()方法,则该线程结束生命周期。死亡的线程不可再次复生。

上一篇:Win10下ngnix的基本使用
下一篇:Spring的装配方式

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月17日 00时43分24秒