学了这么久线程 你知道线程的生命周期吗

240 阅读1分钟

线程的生命周期分为五种状态: 新建(New),就绪(Runnable),运行(Running),阻塞(Blocked)和死亡(Dead)。因为CPU资源一般不可能一直被一个线程长期占用,线程状态经常会在运行和阻塞之间切换。

新建(New)

使用new关键字创建了一个新线程,这时,JVM为其分配了内存,并初始化了成员变量的值。

就绪(Runnable)

当线程调用了start()方法后,就处于就绪状态了。JVM会创建方法调用栈和程序计数器等待其运行。

运行(Running)

线程获得了CPU使用权,开始执行run方法。

阻塞(Blocked)

线程因为某些原因主动或被动放弃了CPU使用权,就进入了阻塞模式。

  • 等待阻塞:线程执行wait()方法,JVM就会把这个线程放入等待队列。
  • 同步阻塞:获取同步锁时,若锁被其他线程占用,就会被阻塞且被放入锁池中。
  • 其他阻塞:当线程调用了sleep/join方法时,JVM就会把这个线程设置成阻塞状态。

死亡(Dead)

  • 正常死亡:run或者call方法执行结束,正常退出
  • 异常死亡:抛出未捕获的Exception或者Error
  • 调用stop:stop方法容易造成死锁,尽量不要使用。