美文网首页
线程简介(线程的的生命周期)

线程简介(线程的的生命周期)

作者: 浅陌_45f3 | 来源:发表于2018-11-04 13:35 被阅读0次

线程的生命周期为:新建,就绪,运行,阻塞,死亡。

新建与就绪状态

当程序使用关键字 new 创建了一个线程之后,该线程就处于新建状态;当线程对象调用 start() 方法后,该线程就处于就绪状态。至于该线程何时运行,就取决于 JVM 里线程调度器的调度。

只能对新建状态的线程调用 start() 方法,不能对死亡状态的线程再次调用 start() 方法,也不能对已经调用 start() 方法的线程再次调用 start() 方法,否则将引发 IllegalThreadStateException。

运行于阻塞状态

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

当运行中的线程发生以下几种情况会使线程处于阻塞状态:
(1) 线程调用 sleep() 方法主动放弃所占用的处理器资源。
(2) 线程调用阻塞式 IO 方法,该方法返回之前,线程处于阻塞状态。
(3) 线程试图获得一个同步监视器,但该同步监视器被其他线程所持有。
(4) 线程在等待某个通知(notify)。
(5) 程序调用线程的 suspend() 方法将该线程挂起。

处于阻塞状态的线程也可以解除阻塞状态:
(1) 调用的 sleep() 方法经过了指定时间。
(2) 线程调用的阻塞式 IO 已经返回。
(3) 线程成功获得了同步监视器。
(4) 线程在等待的通知已经收到。
(5) 处于挂起状态的线程被调用了 resume() 方法。

注意:处于阻塞状态的线程,被解除阻塞后,会重新进入就绪状态,而不是运行状态。

线程死亡

线程会以以下三种方式结束:
(1) run() 方法或 call() 方法执行完成,线程正常结束。
(2) 线程抛出一个未捕获的 Exception 或 Error。
(3) 直接调用该线程的 stop() 方法来结束线程。

为了测试某个线程是否死亡,可以调用线程对象的 isAlive() 方法,当线程处于就绪,运行,阻塞状态时,返回 true,处于新建和死亡状态时,返回 false。

相关文章

  • OC多线程

    iOS多线程方案 技术方案简介语言线程生命周期使用频率pthread通用多线程API 适用于unix/linux/...

  • 线程简介(线程的的生命周期)

    线程的生命周期为:新建,就绪,运行,阻塞,死亡。 新建与就绪状态 当程序使用关键字 new 创建了一个线程之后,该...

  • 多线程

    常用的多线程 技术方案简介语言线程生命周期使用频率pthread一套通用的多线程API,适用于Unix\Linux...

  • iOS多线程

    iOS多线程 iOS中多线程的方案?有什么优缺点? 技术方案简介语言线程生命周期使用频率pthread1.一套通用...

  • iOS多线程

    多线程方案对比 技术方案简介编程语言线程生命周期使用频率pthread一套通用的多线程API适用于Unix、Lin...

  • 多线程之(线程的生命周期)

    线程的生命周期 如果我们想学会、理解,或者用好线程就必须要知道(熟悉)线程的生命周期。线程的生命周期分为:新建阶段...

  • 线程的学习总结

    我打算从线程得生命周期开始总结多线程: 线程的生命周期: 新建状态:线程对象创建之后,线程进入新建状态. 就绪状态...

  • iOS多线程面试题分析

    一、多线程的选择方案 技术方案简介语言线程生命周期使用评率pthread一套通用的多线程API适用于Unix/Li...

  • 需要看的源码

    线程池,看excute的整个过程,线程什么时候会被销毁,线程池的生命周期,线程池里线程的生命周期,项目中怎么用的线...

  • InheritableThreadLocal

    简介 ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函...

网友评论

      本文标题:线程简介(线程的的生命周期)

      本文链接:https://www.haomeiwen.com/subject/axmrxqtx.html