https://juejin.cn/post/6844903558433734669image.png
    阅读起来相当费劲,7种状态

    1. public enum State {
    2. // 表示没有开始的线程
    3. NEW,
    4. // 表示可运行(大家的翻译应该是就绪)的线程
    5. // 表示在JVM正在运行,但是他可能需要等操作系统分配资源
    6. // 比如CPU
    7. RUNNABLE,
    8. // 表示线程在等待监视器锁
    9. // 表示正在等待监视器锁以便重新进进入同步块或者同步方法
    10. // OR 在调用了Object.wait重新进入同步块或者同步方法
    11. BLOCKED,
    12. // 调用如下方法之一会进入WAITING
    13. // 1. Object.wait() 没有加超时参数
    14. // 2. 调用join() 没有加超时参数
    15. // 3. 调用LockSupport.park()
    16. // WAITING状态的线程在等待别的线程做一个特殊的事情(action)例如
    17. // 1. 调用了wait的在等待其他线程调用notify或者notifyAll
    18. // 2. 调用了join的在等待指定线程结束
    19. WAITING,
    20. // 就是有一个特定等待时间的线程
    21. // 加上一个特定的正的超时时间调用如下方法会进入此状态
    22. // 1. Thread.sleep
    23. // 2. Thread.join(long)
    24. // 3. LockSupport.parkNanos
    25. // 4. LockSupport.parkUntil
    26. TIMED_WAITING,
    27. // 执行完了结束的状态
    28. TERMINATED;
    29. }

    线程的生命周期 - 图2