线程和线程池的几个状态值
时间:2022-07-24
本文章向大家介绍线程和线程池的几个状态值,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
线程的状态
- new 新建一个状态值但还未启动。
- Runable Ruanable 包括了操作系统的线程状态中的running和ready,也就是处于此状态底下的线程有可能正在运行或者正在等在CPU分配时间片。
- waitting 无线等待期: 处于这种情况下的线程不会被cpu分配时间片,他们要等待其他线程的显式唤醒才可以。
- 没有设置timeOut 参数的Object.wait()方法。
- 没有设置TimeOut参数的Thread.join()方法。
- LockSupport.park()方法。
- Timed waiting 限期等待: 处于这种状态的线程也不会被分配时间片。但是他无需其他线程唤醒,在一定的时间之后他们会被分配CPU执行的时间
- Thread.sleep
- Object.wait()设置了TimeOut
- Thread.join()设置了TimeOut
- LockSupport.parkNanous()
- LockSupport.parkUtil()
- blocked阻塞: 线程被阻塞了,阻塞状态和等待状态的区别在于,阻塞是在等待获取到一个排他锁而等待是在等待另一个线程的唤醒或者等待一段时间。这种一般会在使用sychronnized的时候会发生
- Terminated结束: 已终止线程的线程状态,线程已结束执行。 上面的描述了6种但是其中有两种都是等待所以说是5种状态值。但是runable 也有区分两种 running 和 ready。所以也可说是6种吧(但是在深入理解java虚拟机一书中有描述是5种)
线程池的状态
在java中线程池的实现的主类是通过ThreadPoolExcutor这个类来实现的, 线程池运行的状态,并不是用户显式设置的,而是伴随着线程池的运行,由内部来维护。线程池内部使用一个变量维护两个值:运行状态(runState)和线程数量 (workerCount)。在具体实现中,线程池将运行状态(runState)、线程数量 (workerCount)两个关键参数的维护放在了一起,如下代码所示
private static int runStateOf(int c) { return c & ~CAPACITY; } //计算当前运行状态
private static int workerCountOf(int c) { return c & CAPACITY; } //计算当前线程数量
private static int ctlOf(int rs, int wc) { return rs | wc; } //通过状态和线程数生成ctl
这篇文章主要说的是状态值所以说java线程池有一下几种状态值:
其生命周期转换如下入所示: 几种状态值的转换
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Laravel框架下载,安装及路由操作图文详解
- PHP实用小技巧之调用录像的方法
- Laravel重定向,a链接跳转,控制器跳转示例
- Laravel 错误提示本地化的实现
- Laravel框架DB facade数据库操作详解
- laravel 解决强制跳转 https的问题
- 在laravel中实现将查询的对象转换为多维数组的函数
- 在Laravel 中实现是否关注的示例
- Laravel框架查询构造器常见用法总结
- laravel 解决多库下的DB::transaction()事务失效问题
- laravel 实现上传图片到本地和前台访问示例
- laravel框架模型中非静态方法也能静态调用的原理分析
- Laravel 5.2 文档 数据库 —— 起步介绍
- laravel csrf排除路由,禁止,关闭指定路由的例子
- thinkphp框架类库扩展操作示例