1
  • 线程的生命周期包含5个阶段,包括:新建、就绪、运行、阻塞、销毁。

    • 新建:就是刚使用new方法,new出来的线程;
    • 就绪:就是调用的线程的start()方法后,这时候线程处于等待CPU分配资源阶段,谁先抢的CPU资源,谁开始执行;
    • 运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run方法定义了线程的操作和功能;
    • 阻塞:在运行状态的时候,可能因为某些原因导致运行状态的线程变成了阻塞状态,比如sleep()、wait()之后线程就处于了阻塞状态,这个时候需要其他机制将处于阻塞状态的线程唤醒,比如调用notify或者notifyAll()方法。唤醒的线程不会立刻执行run方法,它们要再次等待CPU分配资源进入运行状态;
    • 销毁:如果线程正常执行完毕后或线程被提前强制性的终止或出现异常导致结束,那么线程就要被销毁,释放资源;

    完整的生命周期图如下:


    PS:真不知道还有第六种状态

    1308289732882587648  评论     打赏       废物点心
    • guitarock  回复 @废物点心
      权威书籍《Java并发编程艺术》:java线程的状态有六种 初始状态(new) 运行状态(runnable) 阻塞状态(blocked) 等待状态(waiting) 超时等待状态(time_waiting) 终止状态(Terminated)
      guitarock 2021-03-25 18:19   回复 1166178972732514304
    • guitarock  回复 @废物点心
      再提问一下,哪种情况是阻塞(阻塞状态是什么)?
      guitarock 2021-03-25 18:23   回复 1166178972732514304
    • guitarock  回复 @废物点心
      什么情况下线程状态从运行状态转换为阻塞状态?
      guitarock 2021-03-25 18:24   回复 1166178972732514304
    • 废物点心  回复 @guitarock
      就是分配给该线程的时间片和资源被夺走了,实现就是用wait方法
      废物点心 2021-03-25 18:48   回复 1308289732882587648
  • 权威书籍《Java并发编程艺术》

    Java线程状态变迁图

    1166178972732514304  评论     打赏       guitarock
    • 废物点心  回复 @guitarock
      哦哦,这张图我也看见过。超时等待没啥印象。因为操作系统的线程里面没有
      废物点心 2021-03-25 18:50   回复 1308289732882587648
  • 权威书籍《Java并发编程艺术》

    线程的状态图


    1166178972732514304  评论     打赏       guitarock
    • guitarock  回复 @guitarock
      书中有案例证明这六种状态,这里不贴代码了
      guitarock 2021-03-25 18:31   回复 1166178972732514304
相关问题
吕氏春秋 · java / 多线程并发
2020-03-19 03:46 857 4
你好,孙耀耀 · java / 多线程
2023-01-08 15:21 52 10
2023-11-21 15:11 13 2
陈钱罐16 · 领券联盟
2023-11-11 18:09 23 8