美文网首页Java学习笔记
11.3-全栈Java笔记:线程的生命周期

11.3-全栈Java笔记:线程的生命周期

作者: 全栈JAVA笔记 | 来源:发表于2017-07-11 10:49 被阅读51次

一个线程对象在它的生命周期内,需要经历5个状态。

新生状态(New)

用new关键字建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态。

就绪状态(Runnable)

处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于 “线程就绪队列”,等待系统为其分配CPU。 就绪状态并不是执行状态,当系统选定一个等待执行的Thread对象后,它就会进入执行状态。 一旦获得CPU,线程就进入运行状态并自动调用自己的run方法。有4中原因会导致线程进入就绪状态:

1. 新建线程,调用start()方法,进入就绪状态

2. 阻塞线程,阻塞解除,进入就绪状态。

3. 运行线程,调用yield()方法,直接进入就绪状态。

4. 运行线程,JVM将CPU资源从本线程切换到其他线程。

 运行状态(Running)

在运行状态的线程执行自己的run方法中代码,直到调用其他方法而终止、或等待某资源而阻塞或完成任务而死亡。如果在给定的时间片内没有执行结束,就会被系统给换下来回到就绪状态。也可能由于某些“导致阻塞的事件”而进入阻塞状态。

阻塞状态(Blocked)

阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪)。

有4种原因会导致阻塞:

1.执行sleep(int millsecond)方法,使当前线程休眠,进入阻塞状态。当指定的时间到了后,线程进入就绪状态。

2.执行wait()方法,使当前线程进入阻塞状态。当使用nofity()方法唤醒这个线程后,它进入就绪状态。

3.线程运行时,某个操作进入阻塞状态,比如执行IO流操作(read()/write()方法本身就是阻塞的方法)。只有当引起该操作阻塞的原因消失后,线程进入就绪状态。

4.join()线程联合: 当某个线程等待另一个线程执行结束后,才继续执行时,使用join方法。使调用该方法的线程在此之前执行完毕,也就是等待调用该方法的线程执行完毕后再往下继续执行。

死亡状态(Teminiated)

死亡状态是线程生命周期中的最后一个阶段。线程死亡的原因有两个。一个是正常运行的线程完成了它run()方法的全部工作; 另一个是线程被强制性地终止,如通过执行stop或destroy方法来终止一个线程。(stop()/destroy()方法已经被JDK废弃,不推荐使用)

当一个线程进入死亡状态以后,就不能再回到其它状态了。


「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。

 笔记包含从浅入深的六大部分:

 A-Java入门阶段

 B-数据库从入门到精通

 C-手刃移动前端和Web前端

 D-J2EE从了解到实战

 E-Java高级框架精解

 F-Linux和Hadoop 

相关文章

  • 11.3-全栈Java笔记:线程的生命周期

    一个线程对象在它的生命周期内,需要经历5个状态。 新生状态(New) 用new关键字建立一个线程对象后,该线程对象...

  • JVM 系列 - 内存区域 - Java 虚拟机栈(三)

    特点 Java 虚拟机栈(Java Virtual Machine Stacks)是线程私有的,生命周期随着线程,...

  • 虚拟机栈

    介绍 栈也叫内存,主管Java程序的运行,是在线程创建时创建,他的生命周期是跟随线程的生命周期,线程结束栈内存也就...

  • JAVA虚拟机栈和堆

    Java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,他的生命周期与线程相同。...

  • 粗谈Java虚拟机之内存管理

    1.1 Java栈 线程私有,生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行时都会...

  • JAVA虚拟机

    1.运行时数据区域 2.JAVA虚拟机栈 JAVA虚拟机栈是线程私有的,生命周期与线程相同,描述的是JAVA方...

  • 技术体系

    一,java核心 java基础,jvm,算法,多线程,设计模式 Java基础:java基础相关,全栈java基础 ...

  • 深入理解JAVA虚拟机1

    . java内存区域和内存溢出异常 运行时数据区域: 线程独享: java虚拟机栈:生命周期和线程相同,每个方法执...

  • Java基本类型作为局部变量和成员变量时的存储方式有何不同?

    java虚拟机栈是线程私有的,生命周期跟线程相同,每个方法调用的时候都会创建一个栈帧用于存储局部变量表,操作数栈,...

  • JVM 内存模型

    1. 虚拟机栈 VM Stack 线程私有,生命周期与线程相同。VM Stack是描述Java方法执行的内存模型:...

网友评论

    本文标题:11.3-全栈Java笔记:线程的生命周期

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