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代码看到的线程状态而已。

最新文章

  1. 自然语言16.1_Python自然语言处理学习笔记之信息提取步骤&分块(chunking)
  2. 【MySQL 忘记密码】MySQL忘记密码怎么解决 mysql5.5 windows7
  3. 判断App是否在后台运行
  4. 319. Bulb Switcher——本质:迭代观察,然后找规律
  5. IOS9以上如何导入铃声并设置
  6. jvm参数设置大全
  7. Clojure 学习入门(19)—— 数组
  8. sort()方法理解
  9. Android Studio 初始新建项目时 build gradle project 超级慢的原因
  10. Linux中seq命令的用法
  11. 最近快速的过了一遍php基础语法
  12. T4 代码生成 Demo (抽奖程序)
  13. Citrix 桌面虚拟化解决方案与VMware桌面虚拟化解决方案对比
  14. Centos7编译安装GCC7.2
  15. [蓝桥杯]ALGO-90.算法训练_出现次数最多的整数
  16. HTTPS简单原理介绍
  17. python的sciter库Pysciter安装教程(win32 + win64)
  18. laravel 连接同一服务器上多个数据库操作 、 连接多个不同服务器上的不同数据库操作以及多个数据库操作的事务处理
  19. Nginx 配置多站点vhost
  20. OpenGL ES画板

热门文章

  1. 删除UTF-8 BOM头的GUI小工具
  2. windows下用vscode写C++
  3. 从头认识java-14.2 进一步了解数组
  4. vuex 中关于 mapActions 的作用
  5. MySQL 函数笔记
  6. BigDecimal的String类型
  7. Oracle 11g新增not null的字段比10g快--新特性
  8. 分布式搜索elasticsearch 环境搭建
  9. 【Linux】OpenWRT的无线设置注意事项——从2.4G到5G,hwmode不简单
  10. typeof 与 instanceof 区别