8成以上的java线程状态图都画错了,看看这个-图解java并发第二篇
本文作为图解java并发编程的第二篇,前一篇访问地址如下所示:
图形说明
在开始想写这篇文章之前,我去网上搜索了很多关于线程状态转换的图,我惊讶的发现:超过80%的图都是不完整的,或者是错的。所以我只好再次去阅读源码,然后画出下面的这张图,理解了这张图,对于大家理解java 线程的方法调用及开发过程会有很大的帮助。

- 同步阻塞状态比较好理解,就是互斥锁,当前线程使用到的代码块,只有我用完了你才能用。
- 延时等待状态与等待状态的主要区别在于
- 延时等待状态不会释放任何资源及监视器。我就是占着茅坑不拉屎,也不给你用。我就是休息一会,我休息完了,我的还是我的。
- 等待阻塞状态会暂时释放相关线程资源及监视器,我的资源暂时借给你用,等我notify找你的时候你要将资源还给我
Thread.State源码注释
public enum State {
/**
* 新生状态:线程对象创建,但是还未start()
*/
NEW,
/**
* 线程处于可运行状态,但是这个可运行状态并不代表线程一定在虚拟机中执行。
* 需要等待从操作系统获取到资源(比如处理器时间片),才能真正的去运行
*/
RUNNABLE,
/**
* 当前线程处于阻塞状态,正在等待另一个线程的monitor lock释放,才进入synchronized代码块或方法
*/
BLOCKED,
/**
* 调用Object#wait() 、 Thread.join方法后当前线程处于等待状态,
* 等待其他的线程执行特定的动作,才能从等待状态退出。
* 比如:Object.wait()的线程需要等待其他线程调用Object.notify()、Object.notifyAll()才能退出
* 比如:调用了Thread.join()的线程需要等待指定的线程执行完成才能退出等待状态。
*/
WAITING,
/**
* 进入特定时间内的等待状态,等待一段指定的时间sleep(timed)、wait(timed)或者等待Thread.join(timed)的时间.
* 到达指定时间点自动退出恢复到RUNNABLE状态
*/
TIMED_WAITING,
/**
* 线程结束状态
*/
TERMINATED;
}
欢迎关注我的博客,里面有很多精品合集
- 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。
觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。
- 《手摸手教你学Spring Boot2.0》
- 《Spring Security-JWT-OAuth2一本通》
- 《实战前后端分离RBAC权限管理系统》
- 《实战SpringCloud微服务从青铜到王者》
- 《VUE深入浅出系列》
8成以上的java线程状态图都画错了,看看这个-图解java并发第二篇的更多相关文章
- 【JAVA并发第二篇】Java线程的创建与运行,线程状态与常用方法
1.线程的创建与运行 (1).继承或直接使用Thread类 继承Thread类创建线程: /** * 主类 */ public class ThreadTest { public static voi ...
- Java线程状态图
嘤,先盗图一张,后面再补充描述!
- java 线程状态图
- 人人都可以写的可视化Python小程序第二篇:旋转的烟花
兴趣是最好的老师 枯燥的编程容易让人放弃,兴趣才是最好的老师.无论孩子还是大人,只有发现这件事情真的有趣,我们才会非常执着的去做这件事,比如打游戏.如果编程能像玩游戏一样变得有趣,我相信很多人就特别愿 ...
- java线程池的使用与详解
java线程池的使用与详解 [转载]本文转载自两篇博文: 1.Java并发编程:线程池的使用:http://www.cnblogs.com/dolphin0520/p/3932921.html ...
- 程序员的视角:java 线程(转)
在我们开始谈线程之前,不得不提下进程.无论进程还是线程都是很抽象的概念,有一个关于进程和线程很形象的比喻能帮我们更好的理解. 进程就像个房子,房子是一个包含了特定属性的容器,例如空间大小.卧室数量等. ...
- 程序员的视角:java 线程
在我们开始谈线程之前,不得不提下进程. 无论进程还是线程都是很抽象的概念,有一个关于进程和线程很形象的比喻能帮我们更好的理解. 进程就像个房子,房子是一个包含了特定属性的容器,例如空间大小.卧室数量等 ...
- Java线程池的那些事
熟悉java多线程的朋友一定十分了解java的线程池,jdk中的核心实现类为java.util.concurrent.ThreadPoolExecutor.大家可能了解到它的原理,甚至看过它的源码:但 ...
- java线程的理解
java thread类都是native方法实现的,所以没有用平台无关的方法实现,怎么实现的呢? 线程的实现: 第一种:使用内核线程实现. 内核线程就是直接使用操作系统内核支持的线程,由内核完成切换. ...
随机推荐
- Java Filter过滤器(拦截路径的配置+拦截方式的配置+生命周期+多个过滤器的先后执行顺序)
Java Filter过滤器+Listen监听器 啥是过滤器 顾名思义即过滤掉一些东西,比如我们经历的高考中考都是过滤器,他过滤掉一些在学习这一方面不是很好的人,而那些成绩好的人则升入高中,大学. 但 ...
- Grazing on the Run 题解
[题目大意] 大致题意就是,你的初始坐标为\(x\),你要去数轴上的\(n\)个点,问你到达所有点的时间总和最小是多少. 直接贪心肯定不行,所以考虑\(DP\) 先把坐标离散(也就是预处理两点距离\( ...
- java 静态导入、可变参数、集合嵌套
一 静态导入 在导包的过程中我们可以直接导入静态部分,这样某个类的静态成员就可以直接使用了. 在源码中经常会出现静态导入. 静态导入格式: import static XXX.YYY; 导入后YY ...
- Linux Docker部署
Docker 安装 卸载旧版docker yum remove docker \ docker-client \ docker-client-latest \ docker-common \ dock ...
- Homekit_DoHome_智能通断器
本款通断器适用于IOS和android系统用户,苹果用户可以非常方便的使用siri进行有效控制,android用户需要下载Dohome App进行操作,同时支持市面上主流的智能音箱进行控制. 对于an ...
- 清空ARP缓存
arp -n|awk '/^[1-9]/{print "arp -d " $1}'|sh -x
- mxnet笔记
参考链接: https://mxnet.apache.org/api/faq/distributed_training https://mxnet.apache.org/api/faq/gradien ...
- Java中抽象类和接口的介绍及二者间的区别
接口(Interface)和抽象类(Abstract Class)是支持抽象类定义的两种机制. 一.抽象类 在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称 ...
- 牛客网数据库SQL实战解析(41-50题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- JdbcTemplate jar包 下载
我给了一个链接, 是jar download网站上的. 能上去的就可以下载. https://jar-download.com/maven-repository-class-search.php?se ...