一个线程对象在它的生命周期内,需要经历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

转载于:https://blog.51cto.com/javanew/1945759

11.3-全栈Java笔记:线程的生命周期相关推荐

  1. java中线程的生命周期

    文章目录 java中Thread的状态 NEW Runnable BLOCKED WAITING TIMED_WAITING TERMINATED java中线程的生命周期 线程是java中绕不过去的 ...

  2. java中线程的生命周期_Java中的线程生命周期– Java中的线程状态

    java中线程的生命周期 Understanding Thread Life Cycle in Java and Thread States are very important when you a ...

  3. Java中线程的生命周期-图解

    线程的生命周期:当一个线程被创建之后,进入新建状态,JVM则给他分配内存空间,并进行初始化操作.当线程对象调用了start()方法,该线程就处于就绪状态(可执行状态),JVM会为其创建方法调用栈.和程 ...

  4. Java并发 - 线程的生命周期

    线程的生命周期 1. 补充 Java中的线程分为两类:守护线程.用户线程(默认). 它们几乎在每个方面都是相同的,唯一的区别是判断JVM何时离开.意思就是,只要当前JVM实例中尚存任何一个非守护线程没 ...

  5. Java 多线程— 线程的生命周期及方法

    2019独角兽企业重金招聘Python工程师标准>>> 这篇博客介绍线程的生命周期. 线程是一个动态执行的过程,它也有从创建到死亡的过程. 线程的几种状态 在 Thread 类中,有 ...

  6. 11.1-全栈Java笔记:多线程技术的基本概念

    多线程是JAVA语言的重要特性,大量应用于网络编程.应用于服务器端程序的开发.以及最常见的UI界面底层原理.操作系统底层原理都大量使用了多线程. 我们可以流畅的点击软件或者游戏中的各种按钮,其实,底层 ...

  7. 10.4-全栈Java笔记:常用流详解(二)

    上节我们讲到「Java中常用流:文件字节流和字节数组流」,本节我们继续走起~  缓冲流 BufferedInputStream和BufferedOutputStream这两个流是处理流,通过内部缓存数 ...

  8. 9.1-全栈Java笔记: 容器泛型—认识Collection接口

    开发和学习中需要时刻和数据打交道,如果组织这些数据是我们编程中重要的内容. 我们一般通过"容器"来容纳和管理数据.   事实上,数组就是一种容器,可以在其中放置对象或基本类型数据. ...

  9. 4.8-全栈Java笔记:包机制

    包机制是java中管理类的重要手段. 开发中,我们会遇到大量同名的类,通过包我们很容易对解决类重名的问题,也可以实现对类的有效管理. 包对于类,相当于,文件夹对于文件的作用. package 我们通过 ...

最新文章

  1. win10红色警戒黑屏解决
  2. 符合.net准则的事件
  3. java 线程 通过interrupted_分析Java线程中断机制stop和interrupted的用法
  4. Java架构师在线视频,架构师的7大必备技能
  5. mysql有热备设置_Mysql数据热备配置与操作方法
  6. Java基础-序列化和反序列化
  7. What is the difference between LINQ to SQL and LINQ to Entities?
  8. 解决MFC 窗口创建时 争夺焦点的问题
  9. 惠普c7000服务器装系统,HP BladeSystem c7000 安装配置手册
  10. sourcetree合并分支_不会git命令,没关系啊,还有强大的图形界面工具SourceTree
  11. Qt 信号槽的应用(二)
  12. SAP JCO3 官网代码解读 sap call java server
  13. vnc远程控制软件中文版,4款好用的vnc远程控制软件中文版
  14. Periodic Strings (求HoHoHo字符串最小周期)
  15. 如何复制CD音乐(电脑小技巧)
  16. 将Raspberry Pi用作台式PC的17个最佳Raspbian应用
  17. html的绝对定位脱离文档流吗,子元素position:absolute定位之后脱离文档流,怎么使子元素撑开父元素...
  18. 常用数据集/工具下载地址
  19. iPhone上Siri无法正常回应如何解决?
  20. 亲历2012百度开发者大会

热门文章

  1. 总结:被MySQL UTF8编码坑的惨痛教训...
  2. 在ViT、MLP-Mixer等进行4800多次实验,谷歌发现大规模预训练存在瓶颈
  3. 这位挺身而出的研究生,被直接录用!
  4. 这位北大CS硕士小老弟,简直是“卷怪”!
  5. 员工拒绝加班,被判赔公司1.8万!网友炸锅
  6. ​从800个GPU训练几十天到单个GPU几小时,看神经架构搜索如何进化
  7. 如何看待179所高校新增 AI 本科专业,研究生扩招也瞄准 AI?
  8. 8 个 Python 高效数据分析的技巧
  9. RESTful之权限Permissions
  10. Django视图之类视图与中间件