新生->new
就绪->start
运行->CPU调度
结束->stop,run方法执行完
阻塞->sleep

  1. 线程分为被新生、就绪、运行、阻塞、消亡五种状态。
  2. 被new创建后需要调用start方法,等待CPU调用
  3. start后的状态态,即具有运行资格,但没有运行权的线程所处状态。当某一时间点,线程没有获得CPU的执行权,就是处于这个状态。
  4. 阻塞(blocked),即 放弃执行资格 的线程所处状态,目的是让线程暂时停止,让别的线程先运行。有两种方法可以让线程进入阻塞状态。
  • 调用sleep(time)静态方法,使线程进入冻结状态中的睡眠状态,且在time即时间到了之后,自动解除冻结状态。 这里会占用资源,抱着资源睡觉。不会释放锁。此特点对比wait的。可以模拟网络延时,倒计时。
  • 调用wait()方法,使线程进入冻结状态中的等待状态,且只有当用notify()等函数将其“唤醒”之后,才解除冻结。
  1. 解除阻塞状态之后,线程不是直接进入运行状态,因为此时不能获取到CPU的执行权。而是进入临时状态。
    直接回到等待CPU调用 还可以,调用yield()静态方法,礼让。成员方法,join()可以阻塞线程等待其他线程执行完,再开始。
  2. 消亡,即线程结束.当调用stop()方法现在已经弃用,自己增加一个标志位,提供外部方法调用。或者run方法运行结束(不要就是不要有死循环)后。线程进入消亡状态。


java join 进程 java进程的几种状态_java join 进程java join 进程 java进程的几种状态_方法调用_02


进入就绪状态四种情况

  • start方法调用
  • 阻塞解除
  • yield 礼让
  • jvm切换线程

thread.state

  • NEW
    尚未启动的线程处于此状态
  • RUNABLE
    在java虚拟机中执行的线程
  • BLOCKED
    被阻塞等待监视器锁定的线程处于此状态
  • WAITING
    正在等待另一个线程执行特定动作
  • TIMED_WAITING
    正在等待另一个线程执行动作达到指定等待时间的线程
  • TERMINATED
    已退出的线程