4-4-线程生命周期5种状态

文章目录
  1. 1. 生命周期5种状态
    1. 1.1. 1.新建状态new(new创建线程,分配内存,初始化值)
    2. 1.2. 2.就绪状态runnable(调用了start方法,创建方法调用栈和pc等待调度)
    3. 1.3. 3.运行状态running(获得了cpu,开始执行run方法)
      1. 1.3.1. yield方法回到runnable
    4. 1.4. 4.阻塞状态blocked(放弃了cpu使用权,进入runnable)
      1. 1.4.1. 1. 等待阻塞:object.wait等待阻塞放入等待队列(suspend/resume)
      2. 1.4.2. 2.同步阻塞:同步锁被别的线程占用,jvm把线程放入锁池lock pool
      3. 1.4.3. 3.其他阻塞:thread.sleep/t.join/io请求时
    5. 1.5. 5.线程死亡dead
      1. 1.5.1. 1.正常结束:run/call执行完成
      2. 1.5.2. 2.异常结束:抛出未捕获exception/error
      3. 1.5.3. 3.调用stop: 容易导致死锁,不推荐
    6. 1.6. stop和suspend、resume一样,都是过期作废的方法。

生命周期5种状态

image-20210702153838065

1.新建状态new(new创建线程,分配内存,初始化值)

当程序使用 new 关键字创建了一个线程之后,该线程就处于新建状态,此时仅由 JVM 为其分配内存,并初始化其成员变量的值。

2.就绪状态runnable(调用了start方法,创建方法调用栈和pc等待调度)

当线程对象调用了 start()方法之后,该线程处于就绪状态。Java 虚拟机会为其创建方法调用栈和程序计数器,等待调度运行。

3.运行状态running(获得了cpu,开始执行run方法)

如果处于就绪状态的线程获得了 CPU,开始执行 run()方法的线程执行体,则该线程处于运行状态。

yield方法回到runnable

4.阻塞状态blocked(放弃了cpu使用权,进入runnable)

1. 等待阻塞:object.wait等待阻塞放入等待队列(suspend/resume)

2.同步阻塞:同步锁被别的线程占用,jvm把线程放入锁池lock pool

3.其他阻塞:thread.sleep/t.join/io请求时

sleep状态超时,Join等待终止或超市,io处理完毕,线程会去可运行状态。

5.线程死亡dead

1.正常结束:run/call执行完成

2.异常结束:抛出未捕获exception/error

3.调用stop: 容易导致死锁,不推荐

stop和suspend、resume一样,都是过期作废的方法。