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,那么线程会终止。

可以通过以下三种方式来判断中断:

  1. isInterrupted()
    此方法只会读取线程的中断标志位,并不会重置。
  2. interrupted()
    此方法读取线程的中断标志位,并会重置。
  3. throw InterruptException
    抛出该异常的同时,会重置中断标志位。

可以通过线程的interrupt()方法来设置中断标志位true。

原本java是提供了一个stop()方法来终止线程的,很霸道的直接停止线程,但是由于它手段的暴力,可能会造成一些对象的异常赋值,就被弃用了。

快来快来理一理 JAVA Thead状态分析相关推荐

  1. Java后端处理video快进快退播放以及断点续传的原理和代码

    video 快进快退的原理: 通过对所在服务器上的流媒体进行skip操作,然后再response的header里设置相应的Content-Range以及其他属性,来控制视频流的快进快退的功能. 断点续 ...

  2. java lang ill_请MATLAB高手帮忙我的MATLAB老出现以下东西,这些东东还刷的挺快,不按ESC都不停止.java.lang.Ill...

    请MATLAB高手帮忙我的MATLAB老出现以下东西,这些东东还刷的挺快,不按ESC都不停止.java.lang.Ill 请MATLAB高手帮忙 我的MATLAB老出现以下东西, 这些东东还刷的挺快, ...

  3. Java面试题36题快问快答

    六六大顺,快问快答Java面试36问!我们从面试来反推Java学习. 少侠,少侠,今天我们来看Java面试题,从大厂梦反推基础学习. 面试题: JDK 和 JRE 有什么区别? final 在 jav ...

  4. Java的快读快输出

    众所周知,Java Scanner类的读入的真的真的慢 在我们使用Scanner类进行读入数据时,数据一旦过万,他就会显得非常慢 而用StreamTokenizer类差不多好像是要比Scanner快个 ...

  5. java快读快输模板

    java 快读快输 快读: class InputReader {BufferedReader buf;StringTokenizer tok;InputReader() {buf = new Buf ...

  6. acm竞赛技巧——c/c++ /java 快读快写(整数,字符串)

    文章目录 整数 快读 快写 字符串 读入 读出 java快读快输 注意: 本文参考博客 整数 这里用int做示范,long long,__int128 改下变量类型即可 快读 inline int r ...

  7. java算法竞赛必备之快读快写(超详细解读)

    java算法竞赛必备之快读快写(超详细解读) java写算法的缺点:速度慢.读写复杂.莫名WA(错误答案).TL(超时).CL(超内存)- (那我们还学个啥啊,都转c++写算法不香嘛.)别急别急,有缺 ...

  8. 理一理字节对齐的那些事

    前言 字节对齐是我们初学C语言就会接触到的一个概念,但是到底什么是字节对齐?对齐准则又是什么?为什么要字节对齐呢?字节对齐对我们编程有什么启示?本文将简单理一理字节对齐的那些事. 什么是字节对齐 计算 ...

  9. c如何通过偏移量取出文件中的字节_理一理C语言字节对齐的那些事

    作者:守望,Linux应用开发者,目前在公众号[编程珠玑] 分享Linux/C/C++/数据结构与算法/工具等原创技术文章和学习资源. 前言 字节对齐是我们初学C语言就会接触到的一个概念,但是到底什么 ...

最新文章

  1. 关于“插入图片”等功能无法使用的问题
  2. 访中科曙光智能计算技术总监许涛:重新认识面向未来的AI服务器和云计算中心...
  3. 学习PHP 逛的几个网站。
  4. [导入]给家人补补钙!双莲炖腔骨
  5. Fiddler使用方法简介
  6. 电子设计竞赛(三)-SPWM与PID
  7. tomcat与tomee_Apache TomEE(和Tomcat)的自签名证书
  8. 稳定、可扩展、模块化、简化部署过程、版本控制……一文看懂 Kubernetes 到底如何运用!...
  9. react-draft-wysiwyg富文本的使用
  10. 在matplotlib中改变tick(标签)的字体大小
  11. 挣多少钱让你觉得生存无忧,有底气做感兴趣的事?
  12. 分享一次生产应用无法连接Oracle数据库故障
  13. delphi xe android 黑屏,Delphi XE之路(3)解决启动时短暂的黑屏
  14. 语音信号的LPC特征提取
  15. iOS http文件下载
  16. P1157 组合的输出(#define mian main)
  17. 【EXLIBRIS】随笔记 004
  18. GEO-BYB型振弦式表面应变计的主要作用
  19. 视频号哪些领域值得做变现机会更大:国仁楠哥
  20. 二零二二,闯北十年,及时行乐,此生尽兴

热门文章

  1. EmEditor中自动把当前文档复制到金山T盘的VBscript脚本
  2. nginx的worker_processes优化
  3. 数学教科书中编排不太合理的地方(来自网络)
  4. h5打开麦克风权限录音_通过H5实现html页面的录音和播放 (Recorder用于html5录音)...
  5. 自动驾驶CRUW数据集(大型毫米波频域图数据集)
  6. .NET Web开发部分试题(超级简单易学)
  7. 离散系统的零极点分布图
  8. 设备树dts/dtsi格式
  9. 达芬奇 17.1.1为苹果 M1 Mac 添加 H.264 10bit 硬件加速解码支持
  10. source insight打开工程死掉问题头绪