文档章节

线程的五大状态

j
 javaalex
发布于 2016/09/09 14:27
字数 700
阅读 25
收藏 0

线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。 (http://www.blogjava.net/images/blogjava_net/santicom/360%E6%88%AA%E5%9B%BE20110901211600850.jpg )

1.新建状态(New): 当用new操作符创建一个线程时, 例如new Thread(r),线程还没有开始运行,此时线程处在新建状态。 当一个线程处于新生状态时,程序还没有开始运行线程中的代码

 2.就绪状态(Runnable)

    一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当线程对象调用start()方法即启动了线程,start()方法创建线程运行的系统资源,并调度线程运行run()方法。当start()方法返回后,线程就处于就绪状态。

    处于就绪状态的线程并不一定立即运行run()方法,线程还必须同其他线程竞争CPU时间,只有获得CPU时间才可以运行线程。因为在单CPU的计算机系统中,不可能同时运行多个线程,一个时刻仅有一个线程处于运行状态。因此此时可能有多个线程处于就绪状态。对多个处于就绪状态的线程是由Java运行时系统的线程调度程序(thread scheduler)来调度的。

3.运行状态(Running)

    当线程获得CPU时间后,它才进入运行状态,真正开始执行run()方法.

4. 阻塞状态(Blocked)

    线程运行过程中,可能由于各种原因进入阻塞状态:
    1>线程通过调用sleep方法进入睡眠状态;
    2>线程调用一个在I/O上被阻塞的操作,即该操作在输入输出操作完成之前不会返回到它的调用者;
    3>线程试图得到一个锁,而该锁正被其他线程持有;
    4>线程在等待某个触发条件;
    ......           

    所谓阻塞状态是正在运行的线程没有运行结束,暂时让出CPU,这时其他处于就绪状态的线程就可以获得CPU时间,进入运行状态。

5. 死亡状态(Dead)

    有两个原因会导致线程死亡:
    1) run方法正常退出而自然死亡,
    2) 一个未捕获的异常终止了run方法而使线程猝死。
    为了确定线程在当前是否存活着(就是要么是可运行的,要么是被阻塞了),需要使用isAlive方法。如果是可运行或被阻塞,这个方法返回true; 如果线程仍旧是new状态且不是可运行的, 或者线程死亡了,则返回false.

© 著作权归作者所有

j
粉丝 0
博文 21
码字总数 11679
作品 0
合肥
私信 提问
线程的基本概念

一、线程的初步认识 1、区分进程、程序和线程 程序:没有执行的指令和相关数据的集合,没有任何运行的含义。 进程:正在运行的程序就是一个进程,当你运行一个程序,也就启动了一个进程。进程...

石飞飞
2016/09/25
4
0
java线程状态转换/同步与锁

Java线程的转换: 线程状态总的可分为五大状态:分别是生、死、可运行、运行、等待/阻塞。 1、 新状态:线程对象已经创建,还没有调用start()方法 2、 可运行状态:当线程有资格运行,但调度...

晨曦之光
2012/05/16
279
0
JAVA多线程--线程状态的转换

一、线程状态 线程状态总的可分为五大状态:分别是生、死、可运行、运行、等待/阻塞。 1、新状态:线程对象已经创建,还没有在其上调用start()方法。 2、可运行状态:当线程有资格运行,但调...

董家二少
2016/01/13
134
0
DICOM:DICOM开源库多线程分析之“LF_ThreadPool in DCM4CHEE”

版权声明:本文为zssure原创文章,转载请注明出处,未经允许不得转载。 https://blog.csdn.net/zssureqh/article/details/50616225 题记: 临近农历年关(对国人来说,这个才叫新年嘛),工作...

zssure
2016/01/31
0
0
Java线程:线程状态的转换

一、线程状态 线程的状态转换是线程控制的基础。线程状态总的可分为五大状态:分别是生、死、可运行、运行、等待/阻塞。用一个图来描述如下: 1、新状态:线程对象已经创建,还没有在其上调用...

beibugulf
2016/11/18
18
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员web前端教程分享web前端入门基础知识

  好程序员web前端教程分享web前端入门基础知识,作为合格的Web前端工程师必须得掌握HTML、CSS和JavaScript。只懂其中一两个还不行,必须对这三门语言都要熟悉。下面我们一起来看一看吧! ...

好程序员官网
刚刚
0
0
elasticsearch 中文分词插件IK-Analyze

elasticsearch 版本 7.3 安装中文分词插件 插件对应的版本需要和elasticsearch的版本一致 插件各个版本下载地址 https://github.com/medcl/elasticsearch-analysis-ik/releases 使用elastic...

kdy1994
4分钟前
0
0
只用一套解决方案,就可解决80%的交通物流行业信息难题

行业背景 新中国成立70多年来,中国交通运输总体上已经形成了多节点、全覆盖的综合运输网络,“五纵五横”综合运输大通道基本贯通,一大批综合客运、货运枢纽站场(物流园区)投入运营,取得...

朕想上头条
6分钟前
0
0
spring-boot结合AOP实现数据源动态配置

Spring-Boot+AOP方式实现多数据源切换 设计总体思路:Spring-Boot+AOP方式实现多数据源切换,继承AbstractRoutingDataSource实现数据源动态的获取,在service层使用注解指定数据源。 一、多数...

蜗牛伊
7分钟前
0
0
干货 | 京东技术中台的Flutter实践之路

在 2019 年,Flutter 推出了多个正式版本,支持的终端越来越多,使用的项目也越来越多。Flutter 正在经历从小范围尝鲜到大面积应用的过程,越来越多的研发团队加入到 Flutter 的学习热潮中,...

京东云技术新知
11分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部