快来快来理一理 JAVA Thead状态分析
Thread理一理
可恶,阅读aqs的时候发现对java多线程各种操作不敏感,进度就很憋屈,这里给自己理一下。
线程状态
- 初始态
- 就绪态
- 运行态
- 等待态
- 计时等待态
- 阻塞态
- 终止态
状态转换
- 初始态:也就是线程刚创建的状态,对应java就是线程还没有start之前的状态,此状态在线程状态转换中存在感较低,只是个入口。
- 就绪态:这就是已经开始执行的线程的初始状态了,在等待cpu时间片轮转到就绪态的线程,那么就会转换到运行态。
- 运行态:字面意思,这就是冲冲冲状态。
- 等待态:也是字面意思,线程等待了,需要被别的线程显示的唤醒,进入就绪态。
- 计时等待态:和等待态类似,不过不只是可以通过别的线程显示的唤醒,而是可以当设置的等待时间结束后,重新成为就绪态。
- 阻塞态:进入同步代码块,或者io阻塞,同步代码块就是synchorized重量级锁锁住的代码快,io阻塞就是当用户线程发出IO请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,简单来说就是咱调用read()方法会把线程阻塞在这里,等待用户输入。
终止态:线程的方法执行结束了就是变成终止态了,一旦被终止就不能复生了。
copy一张图:
挺清晰的哈:
- 初始态:start()方法,让线程进入就绪态。
- 就绪态:没有方法帮助它进行状态切换,只能等待时间片的降临而转换成运行态。
- 运行态:
运行结束或者异常中断会变成终止态。
调用wait()、join()、park()会让运行态线程转换为等待态,等待被唤醒。
调用wait(milies)、join(milies)、sleep(milies)、parkNanos()会让线程进入计时等待态。
遇到同步代码块或者io,进入阻塞态。 - 等待态:处于等待态的线程被调用notify()/notifyAll()、unpark()或者run()结束了,会被唤醒进入就绪态。
- 计时等待态:处于计时等待态相比等待态就多一个超时释放。
- 阻塞态:等待同步代码块释放或者io结束就完事。
这里单独托出来说一个部分,那就是中断对线程的影响。
中断
中断我的理解就是java对线程停止的一个操作,也是现在jdk推荐的唯一停止线程的操作。
它实际的运行没有它的名字霸气,也就是说不是说中断就直接中断线程,需要这样来理解:
每个线程都会拥有一个中断标志位,默认是false,可以通过调用方法来将线程的中断标记位置为true。
当线程做竞争锁、运行态等状态下,线程是不可中断的,中断标记不会对线程产生影响(除非显示的进行判断停止)。
但是当线程处于等待态、超时等待态时,线程会定时的判断中断标记位是否标记中断,如果中断标记位是true,那么线程会终止。
可以通过以下三种方式来判断中断:
- isInterrupted()
此方法只会读取线程的中断标志位,并不会重置。 - interrupted()
此方法读取线程的中断标志位,并会重置。 - throw InterruptException
抛出该异常的同时,会重置中断标志位。
可以通过线程的interrupt()方法来设置中断标志位true。
原本java是提供了一个stop()方法来终止线程的,很霸道的直接停止线程,但是由于它手段的暴力,可能会造成一些对象的异常赋值,就被弃用了。
快来快来理一理 JAVA Thead状态分析相关推荐
- Java后端处理video快进快退播放以及断点续传的原理和代码
video 快进快退的原理: 通过对所在服务器上的流媒体进行skip操作,然后再response的header里设置相应的Content-Range以及其他属性,来控制视频流的快进快退的功能. 断点续 ...
- java lang ill_请MATLAB高手帮忙我的MATLAB老出现以下东西,这些东东还刷的挺快,不按ESC都不停止.java.lang.Ill...
请MATLAB高手帮忙我的MATLAB老出现以下东西,这些东东还刷的挺快,不按ESC都不停止.java.lang.Ill 请MATLAB高手帮忙 我的MATLAB老出现以下东西, 这些东东还刷的挺快, ...
- Java面试题36题快问快答
六六大顺,快问快答Java面试36问!我们从面试来反推Java学习. 少侠,少侠,今天我们来看Java面试题,从大厂梦反推基础学习. 面试题: JDK 和 JRE 有什么区别? final 在 jav ...
- Java的快读快输出
众所周知,Java Scanner类的读入的真的真的慢 在我们使用Scanner类进行读入数据时,数据一旦过万,他就会显得非常慢 而用StreamTokenizer类差不多好像是要比Scanner快个 ...
- java快读快输模板
java 快读快输 快读: class InputReader {BufferedReader buf;StringTokenizer tok;InputReader() {buf = new Buf ...
- acm竞赛技巧——c/c++ /java 快读快写(整数,字符串)
文章目录 整数 快读 快写 字符串 读入 读出 java快读快输 注意: 本文参考博客 整数 这里用int做示范,long long,__int128 改下变量类型即可 快读 inline int r ...
- java算法竞赛必备之快读快写(超详细解读)
java算法竞赛必备之快读快写(超详细解读) java写算法的缺点:速度慢.读写复杂.莫名WA(错误答案).TL(超时).CL(超内存)- (那我们还学个啥啊,都转c++写算法不香嘛.)别急别急,有缺 ...
- 理一理字节对齐的那些事
前言 字节对齐是我们初学C语言就会接触到的一个概念,但是到底什么是字节对齐?对齐准则又是什么?为什么要字节对齐呢?字节对齐对我们编程有什么启示?本文将简单理一理字节对齐的那些事. 什么是字节对齐 计算 ...
- c如何通过偏移量取出文件中的字节_理一理C语言字节对齐的那些事
作者:守望,Linux应用开发者,目前在公众号[编程珠玑] 分享Linux/C/C++/数据结构与算法/工具等原创技术文章和学习资源. 前言 字节对齐是我们初学C语言就会接触到的一个概念,但是到底什么 ...
最新文章
- 关于“插入图片”等功能无法使用的问题
- 访中科曙光智能计算技术总监许涛:重新认识面向未来的AI服务器和云计算中心...
- 学习PHP 逛的几个网站。
- [导入]给家人补补钙!双莲炖腔骨
- Fiddler使用方法简介
- 电子设计竞赛(三)-SPWM与PID
- tomcat与tomee_Apache TomEE(和Tomcat)的自签名证书
- 稳定、可扩展、模块化、简化部署过程、版本控制……一文看懂 Kubernetes 到底如何运用!...
- react-draft-wysiwyg富文本的使用
- 在matplotlib中改变tick(标签)的字体大小
- 挣多少钱让你觉得生存无忧,有底气做感兴趣的事?
- 分享一次生产应用无法连接Oracle数据库故障
- delphi xe android 黑屏,Delphi XE之路(3)解决启动时短暂的黑屏
- 语音信号的LPC特征提取
- iOS http文件下载
- P1157 组合的输出(#define mian main)
- 【EXLIBRIS】随笔记 004
- GEO-BYB型振弦式表面应变计的主要作用
- 视频号哪些领域值得做变现机会更大:国仁楠哥
- 二零二二,闯北十年,及时行乐,此生尽兴
热门文章
- EmEditor中自动把当前文档复制到金山T盘的VBscript脚本
- nginx的worker_processes优化
- 数学教科书中编排不太合理的地方(来自网络)
- h5打开麦克风权限录音_通过H5实现html页面的录音和播放 (Recorder用于html5录音)...
- 自动驾驶CRUW数据集(大型毫米波频域图数据集)
- .NET Web开发部分试题(超级简单易学)
- 离散系统的零极点分布图
- 设备树dts/dtsi格式
- 达芬奇 17.1.1为苹果 M1 Mac 添加 H.264 10bit 硬件加速解码支持
- source insight打开工程死掉问题头绪