线程的生命周期

 操作系统中线程的生命周期

JDK中用Thread.State类定义了线程的几种状态

要想实现多线程,必须在主线程中创建新的线程对象。 Java 语言使用 Thread 类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五 种状态
        >新建: 当一个 Thread 类或其子类的对象被声明并创建时,新生的线程对象处于新建状态
        >就绪: 处于新建状态的线程被 start() 后,将进入线程队列等待 CPU 时间片,此时它已具备了运行的条件,只是没分配到CPU 资源
        >运行: 当就绪的线程被调度并获得 CPU 资源时 , 便进入运行状态, run() 方法定义了线程的操作和功能
        >阻塞: 在某种特殊情况下,被人为挂起或执行输入输出操作时,让出 CPU 并临时中止自己的执行,进入阻塞状态
        >死亡: 线程完成了它的全部工作或线程被提前强制性地中止或出现异常导致结束

新建→就绪
        进程刚创建出来就是新建状态,当资源分配完毕后就会变成就绪状态。

就绪→运行
        处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成运行状态。

运行→就绪
        处于运行状态的进程在其执行过程中,因分配给它的一个时间片已用完或更高优先级的进程抢占而不得不让出CPU,于是进程从运行状态转变成就绪状态。

运行→阻塞
        正在执行的进程因等待某种事件发生而无法继续运行时,便从运行状态变成阻塞状态。

阻塞→就绪
        处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。

运行→终止
        程序运行完毕就会变成终止状态。

线程的生命周期中可分为以下6种状态:

  1. NEW(初始化)状态

    实例化一个Thread类对象出来(未执行start()方法前),Thread的状态为NEW。

  2. RUNNABLE(可运行)状态

    调用线程的start()方法,此时线程进入RUNNABLE状态,该状态的线程位于可运行线程池中,等待被操作系统调度,获取CPU的使用权。

    当获得CPU的时间片时,线程进入运行状态,执行程序代码。

  3. BLOCKED(阻塞)状态当线程等待获取monitor锁(synchronized)时,线程就会进入BLOCKED状态。                     
        > 等待获取monitor锁,线程的状态是BLOCKED。
                                                                      
        > 等待获取Lock锁(LockSupport.park()),线程的状态是WAITING。
  4. WAITING(等待)状态
    当执行Object.wait()、Thread.join()、LockSupport.park()等操作时,线程会从RUNNABLE状态进入WAITING状态。

    当执行Object.notify()/notifyAll()、Thread.join()程序执行完、LockSupport.unpark()、线程被中断等操作时,线程会从WAITING状态进入RUNNABLE状态。

  5. TIMED_WAITING(超时等待)状态
    当执行Thread.sleep(time)
    > Thread.join(time)
    > Object.wait(time)
    > LockSupport.parkNanos(time)
    > LockSupport.partUntil(time)等操作时,线程会从RUNNABLE状态进入TIMED_WAITING状态。

    当运行超时时间到
    > Thread.join()线程执行完
    > Object.notify()/notifyAll()
    > LockSupport.unpark()
    > 线程被中断等操作时,线程会从TIMED_WAITING状态进入RUNNABLE状态。

  6. TERMINATED(终止)状态

    当线程执行完毕、Thread.stop()、内存溢出时,线程就会进入TERMINATED状态。

    线程一旦死亡,就无法复活。在一个死亡的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。

Java中线程的状态与操作系统中线程的对应关系:

NEW新建

 RUNNABLE就绪、运行、部分阻塞

TIMED_WAITING阻塞

WAITING阻塞

BLOCKED阻塞

TERMINATED终止

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值