线程的5种状态:

每个 Java 程序都有一个缺省的主线程,对于 Java 应用程序,主线程是 main()方法执行的线索;

对于 Applet 程序,主线程是指挥浏览器加载并执行 Java Applet 程序的线索。要想实现多线程,

必须在主线程中创建新的线程对象。任何线程一般具有五种状态,即创建、就绪、运行、阻塞、终止。

1、新生状态

在程序中用构造方法(new操作符)创建一个新线程时,如new Thread(r),该线程就是创建状态,

此时它已经有了相应的内存空间和其它资源,但是还没有开始执行。

2、就绪状态

新建线程对象后,调用该线程的 start()方法就可以启动线程。当线程启动时,线程进入就绪状态(runnable)。

由于还没有分配CPU,线程将进入线程队列排队,等待 CPU 服务,这表明它已经具备了运行条件。当系统挑选一个

等待执行的Thread对象后,它就会从等待执行状态进入执行状态。系统挑选的动作称之为“CPU调度"。一旦获得CPU

线程就进入运行状态并自动调用自己的run方法。

3、运行状态

当就绪状态的线程被调用并获得处理器资源时,线程就进入了运行状态。此时,自动调用该线程对象的 run()方法。

run()方法定义了该线程的操作和功能。运行状态中的线程执行自己的run方法中代码。直到调用其他方法或者发生阻塞

而终止。

4、阻塞状态

一个正在执行的线程在某些特殊情况下,如被人为挂起或需要执行耗时的输入输出操作时,将让出 CPU 并暂时中止

自己的执行,进入堵塞状态。在可执行状态下,如果调用 sleep()、 suspend()、 wait()等方法,线程都将进入堵塞状态。

堵塞时,线程不能进入排队队列,只有当引起堵塞的原因被消除后,线程转入就绪状态。重新到就绪队列中排队等待,

这时被CPU调度选中后会从原来停止的位置开始继续执行。

记住:阻塞被消除后是回到就绪状态,不是运行状态。

5、死亡状态

线程调用 stop()方法、destory()方法或 run()方法执行结束后,线程即处于死亡状态。处于死亡状态的线程不具有继续运行的能力。

可以通过getState()方法来获取线程当前的状态:NEW 、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED

常见问题:

1、造成线程阻塞的方法?

阻塞线程的方法:join、yield、sleep 和Object的wait()方法

2、Java的守护进程(后台进程)?

设置线程为后台进程运行:setDaemon(true) 如果一个进程中只有后台线程在运行,这个进程就会结束。

3、造成线程阻塞后,线程回到哪个状态了?

通过join、yield、sleep造成线程阻塞后是回到了就绪状态

3、哪些状态之后是回到就绪状态?

a)通过join、yield、sleep造成线程阻塞后是回到了就绪状态

b)遇到synchronized后

c)遇到Object的等待wait方法后

4、sleep会释放锁吗?

sleep不会释放锁【它会抱着锁睡觉】

5、线程都有哪些状态?具体是怎么运行的?

线程有:创建、就绪、运行、阻塞、终止。5种状态

1.通过new关键字创建后,进入到新生状态

2.调用start后进入就绪状态

3.CPU调度到本线程后,本线程开始执行。进入到运行状态

4.运行中遇到join,yield,sleep造成阻塞,进入阻塞状态。阻塞完成后,又回到就绪状态

5.线程正常执行完,或者遇到异常终止后,进入死亡状态

6、终止线程有哪几种方法?

线程调用 stop()方法、destory()方法或 run()方法执行结束后,线程即处于死亡状态。处于死亡状态的线程不具有继续运行的能力。

推荐使用boolen标识来停止线程

线程五种状态(新建、就绪、运行、阻塞、死亡)相关推荐

  1. 操作系统中进程的五种状态与JAVA中线程的六种状态

    操作系统中的五种状态 新建:创建新的进程 就绪:进程已经获得除CPU时间片以外的任何资源,一旦获得cpu时间片就能立马执行. 执行:处于就绪队列中的进程获得了时间片运行进程. 阻塞:进程时间片用完进入 ...

  2. 线程及线程池的五种状态

    线程的5种状态 线程可以有如下5种状态:New .Runnable .Running .Blocked .Dead 状态之间的转换如图: 1.New (新创建) 当用new操作符创建一个线程时,如ne ...

  3. 线程的五种状态及状态的切换

    线程状态示意图 首先看下这张图,这张图标注了线程的五种状态,以及进程间的切换. 简述线程状态 新建状态 新建状态:新建了一个线程对象,该对象就处于新建状态. 就绪状态 就绪状态:线程对象创建后,其他线 ...

  4. 线程池的五种状态及创建线程池的几种方式

    上篇<Java线程的6种状态详解及创建线程的4种方式> 前言:我们都知道,线程是稀有资源,系统频繁创建会很大程度上影响服务器的使用效率,如果不加以限制,很容易就会把服务器资源耗尽.所以,我 ...

  5. Java并发编程一线程池的五种状态

    推荐:Java并发编程汇总 Java并发编程一线程池的五种状态 原文地址 Java多线程线程池(4)–线程池的五种状态 正文 线程池的5种状态:Running.ShutDown.Stop.Tidyin ...

  6. 线程的几种状态_拜托:不要再问我线程有多少种状态了

    废话不多说,有六种状态 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态.在线程的生命周期中, 有几种状态呢?在Thread类中包含了个State枚举类,State枚举类 ...

  7. 一张图看明白Git的四个区五种状态

    五种状态间的顺序操作 四个区 工作区(Working Area) 暂存区(Stage) 本地仓库(Local Repository) 远程仓库(Remote Repository) 五种状态 未修改( ...

  8. ajax 五种状态,ajax的五种状态

    ajax的五种状态(readyState ) 0 - (未初始化)还没有调用send()方法 1 - (载入)已调用send()方法,正在发送请求 2 - (载入完成)send()方法执行完成,已经接 ...

  9. readyState的五种状态详解【转】

    在<Pragmatic Ajax A Web 2.0 Primer >中偶然看到对readyStae状态的介绍,感觉这个介绍很实在,摘译如下: 0: (Uninitialized) the ...

最新文章

  1. 学计算机科学与技术考研考哪些专业课程,计算机科学与技术考研考哪些科目 备考技巧有哪些...
  2. C/C++ 输出整数带正负号
  3. python urllib2_Python爬虫 urllib2的使用方法详解
  4. 序数是什么意思_序数与基数
  5. 台达ms300变频器使用手册中文_台达变频器:满足未来驱动需求
  6. JavaScript面向对象实现
  7. Kbengine游戏引擎-【4】demo-kbengine_unity3d_demo 在容器docker上安装测试
  8. 错误: 编码GBK的不可映射字符 - Android Studio 生成javadoc文档时报错
  9. html表格 溢出,html – 如何创建在溢出时滚动的表格单元格
  10. oracle学习笔记之pI/sql视频小结
  11. 查看Linux占用内存/CPU最多的进程
  12. 收集常用的.net开源项目
  13. 轻松解决Mac和Windows中Unity汉化问题
  14. 使用matlab设计iir滤波器并自行编写代码实现iir滤波器(可对应于C语言应用在嵌入式系统中)
  15. 三维重建开源代码汇总【保持更新】
  16. 人工智能畅想——《人工智能简史》读后感
  17. PD协议诱骗取电XSP01支持Type-C 5V9V12V15V20V原理图
  18. SVM中对偶、凸优化与KTT条件问题
  19. 安装MySQL报错:Failing package is: mysql-community-client-5.7.40-1.el7.x86_64 GPG Keys are configured as
  20. 【高德地图进阶】--- 带图片的点(1)

热门文章

  1. 第十六届全国大学生智能车竞赛航天智慧物流竞赛成绩与奖项
  2. 2021年春季学期-信号与系统-第一次作业参考答案-第五题
  3. Matplotlib绘制简单函数的梯度下降法
  4. 2020年春季学期信号与系统课程作业参考答案-第十三次作业
  5. 感觉没有学会什么真正的本领
  6. flir红外数据集_设备停机导致损失惨重?FLIR红外自动化解决方案了解一下
  7. ibm750服务器维护,IBM 750服务器.PDF
  8. 嵌入式驱动开发 视频学习推荐
  9. java 4d_GitHub - wm3445/Java-concurrency at 4d10ae51a9deec37340fc40d03f205cfbe8de43b
  10. oracle导入dmp报无效的sql,oracle施用pl/sql导入数据库备份文件dmp导入失败原因