Java线程生命周期图

2019-06-09

图1

注意点

  • 对象获取锁失败或者获得锁的状态下调用wait方法后会释放锁,将进入等待队列等待被唤醒,当其他线程调用notify或notifyAll唤醒此线程,此线程将进入锁池去竞争锁,进入锁池的线程不一定能获得锁,还有可能回到等待队列。即等待队列和锁池是两个概念,不要搞混
  • 线程进入阻塞状态,不会释放锁,满足条件时可以回到Running状态
  • 新建(new)和死亡(dead)是单向的状态,不可重复
    image

图2

注意点

  • 图中的LockSupport类来自J.U.C包,在AQS等地方都有用到,可让当前线程释放资源挂载和取消挂载竞争资源
    image

图3

注意点

  • 和图1类似,相比图2,遗漏了当线程中断后进入死亡状态的情形
    image