Java多线程系列 基础篇01 线程的状态
1.进程和线程
进程:
计算机中程序关于某数据集合的一次运行活动,是计算机系统进行资源分配和调度的基本单位,是操作系统结构的基础。
线程:
线程是进程的实例,是CPU进行资源分配和调度的最小单位,线程是轻量级的进程。
2.线程状态
public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; }
3.线程状态图

4.状态说明
1.NEW (新建)
创建后未启动(未调用start()方法)的线程
2.RUNNABLE (可运行)
线程所需资源已经准备好了,此状态包含了os中线程的 Running和Ready两个状态(处于这两种某一个状态),当处于Ready状态时,等待cpu时间分片并使用调度器调度;当出于Rinning状态时,此线程已经正在运行了。
3.BLOCKED (阻塞)
线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:
(01) 等待阻塞:通过调用线程的wait()方法,当前线程会释放对象锁,线程进入等待状态,等到被其他线程唤醒时,未获得对象锁后进入阻塞状态。
(02) 同步阻塞:线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。
(03) 其他阻塞:通过调用线程的sleep()或join()或发出了I/O请求时 ,线程会进有限期等待状态,在等到sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,未获得对象锁后进入阻塞状态。
3.WAITING(无限期等待)
线程调用wait()或者join()后,线程进入无限期等待状态,一直无期限等待某些特殊事件的发生,如调用wait()方法的线程等待notify()/notifyAll();调用join()的线程等待目标线程结束。一旦等到期望的事件发生,则开始获取对象锁,获取失败进入阻塞状态,获取成功进入可运行状态。
4.TIMED_WAITING(有限期等待)
线程调用sleep(long)、wait(long)、join(long)后,线程进入有限期等待状态,一直等待期限结束,则开始获取对象锁,获取失败进入阻塞状态,获取成功进入可运行状态。
5.TERMINATED(结束)
线程结束执行。其实这只是Java语言级别的一种状态,在操作系统内部可能已经注销了相应的线程,或者将它复用给其他需要使用线程的请求,而在Java语言级别只是通过Java代码看到的线程状态而已。
Java多线程系列 基础篇01 线程的状态的更多相关文章
- Java多线程系列--“基础篇”01之 基本概念
多线程是Java中不可避免的一个重要主体.从本章开始,我们将展开对多线程的学习.接下来的内容,是对“JDK中新增JUC包”之前的Java多线程内容的讲解,涉及到的内容包括,Object类中的wait( ...
- Java多线程系列 基础篇02 线程的创建和运行
1.线程创建的方式常用有两种 1. 继承 Thread 类创建线程 2. 实现 Runnable 接口创建线程 2.Thread 和 Runnable的区别 Thread和Runnable的相同点:都 ...
- 多线程系列 - 基础篇01 - 线程基本概念 & 线程优先级 & 守护线程 60%
1.什么是线程 将线程理解为轻量级进程,它与进程的最大的区别是: 多个线程共享一个进程资源: 对于OS的许多资源的分配和管理(如内存)通常都是进程级别的,线程只是os调度的最小单位: 相对于进程来说更 ...
- Java多线程系列 基础篇03 线程的优先级和守护线程
1. 线程优先级 现代操作系统中基本上使用时间分片的方式调度线程,通过设置线程优先级,使优先级高的线程获得时间片的次数多于优先级低的线程. 在java 线程中,通过一个整形变量prority来控制优先 ...
- Java多线程系列 基础篇04 线程中断
1. 中断线程 中断可以理解为线程的一个标志位属性,它表示一个运行中的线程是否被其他线程进行了中断操作,其他线程通过调用该线程的interrupt()方法对其进行中断操作,线程通过检查自身是否被中断来 ...
- Java多线程系列--“基础篇”05之 线程等待与唤醒
概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long t ...
- Java多线程系列--“基础篇”06之 线程让步
概要 本章,会对Thread中的线程让步方法yield()进行介绍.涉及到的内容包括:1. yield()介绍2. yield()示例3. yield() 与 wait()的比较 转载请注明出处:ht ...
- Java多线程系列--“基础篇”07之 线程休眠
概要 本章,会对Thread中sleep()方法进行介绍.涉及到的内容包括:1. sleep()介绍2. sleep()示例3. sleep() 与 wait()的比较 转载请注明出处:http:// ...
- Java多线程系列--“基础篇”09之 interrupt()和线程终止方式
概要 本章,会对线程的interrupt()中断和终止方式进行介绍.涉及到的内容包括:1. interrupt()说明2. 终止线程的方式2.1 终止处于“阻塞状态”的线程2.2 终止处于“运行状态” ...
随机推荐
- htop简介
htop可谓top的升级版,top不可以鼠标操作,但是htop可以使用鼠标操作 启动方式:命令行下输入htop直接启动,启动后的界面如图所示 操作:可以使用上下左右方向键进行移动查看.可以使用鼠标点击 ...
- ylb:SQL 存储过程(Procedure)
ylbtech-SQL Server: SQL Server-SQL 存储过程(Procedure) 1,存储过程(Procedure)-基本创建与操作 2,存储过程(Procedure)-入参 3, ...
- AutoIT V3如何修改字体
1 如图所示,文字很小,阅读和编写多很吃力. 2 按住Ctrl,鼠标滚轮上下滚动可以改变字体大小. 3 如何修改界面的字体,比如改为微软雅黑的字体,现在还没有一个好的解决方案,大家先将就着用吧 ...
- centos DHCP
yum install dhcp cat /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example > /etc/dhcp/dhcpd.conf vim /etc ...
- C 语言经典100例
C 语言经典100例 C 语言练习实例1 C 语言练习实例2 C 语言练习实例3 C 语言练习实例4 C 语言练习实例5 C 语言练习实例6 C 语言练习实例7 C 语言练习实例8 C 语言练习实例9 ...
- 服务器,数据库连接注意mysql的user表
update user set host='localhost' where user='root';
- Android Canvas之Path操作
接上篇,Android自己定义View工具:Paint&Canvas(二) 上一篇中介绍的Canvas绘制图形仅仅能画一些常规图形(圆.椭圆.矩形等),假设想绘制更复杂的图形.Path神器来了 ...
- css样式控制元素固定在底部
回复固定在底部:css样式用到了 box-sizing属性 box-sizing:border-box; -moz-box-sizing:border-box; /* Firefox */ -webk ...
- Apache上部署Django
0. 部署环境 Ubuntu 14.04 on AliYun Apache 2.4.7 Python 3 [2.7升级3请看http://www.cnblogs.com/manhua/p/423504 ...
- 【Unity 3D】学习笔记三十三:游戏元素——天空盒子
天空盒子 一般的3D游戏都会有着北京百年一遇的蓝天.让人惊叹不已.事实上天空这个效果没有什么神奇的仅仅需用到天空盒子这个组件即可.能够将天空设想成一个巨大的盒子,这个盒子将整个游戏视图和全部的游戏元素 ...