线程的状态,以及和锁有什么关系

1、新建(new):当用new关键字创建Thread对象的时候属于新建状态;

2、就绪(start()):当调用start方法时,线程进入就绪状态,等待CPU调度;start方法是启动线程的,调用后会让线程进入就绪状态,等待CPU调度,之后会自动执行run方法,而run方法只是线程要执行的业务逻辑的载体,直接调用run方法并不会启动新线程,所以run方法可以多次调用属于普通方法,start方法只能被调用一次,这两个方法的区别

3、运行:当CPU调度到这个线程时,他就会从就绪状态切换到运行状态,自动调用run方法开始执行

4、阻塞blocked:在run方法中若是调用了synchronized代码块或者方法,那么该线程就去获取锁,若是获取到了还是继续运行状态,若是获取不到就阻塞状态,等待其他线程释放锁,然后当前线程就可能获取到锁到达就绪状态,等待CPU调度;

5、等待wait:当前已经获取锁的线程才能调用wait方法,也就是wait要和synchronized一起使用,要在synchronized代码块中执行,执行wait方法就是阻塞等待状态,然后当前线程释放锁,让其他线程获得锁,其他获得锁的线程调用notify或者notifyall去唤醒在waitset中等待的线程也就是刚刚执行wait的线程,去和entrylist中的线程一起抢夺锁,谁抢到就是谁的;到达就绪状态,等待CPU调度;

6、计时等待sleep(long):当线程调用了sleep方法,线程到达计时等待状态,时间一到就由计时等待到达就绪状态,等待CPU去调度;

7、终止:当线程之行结束就是终止状态。

相关推荐
泡茶喝茶写代码6 分钟前
A股量化数据工程:从 REST 接口到策略信号(第 17 篇):创新高与新低扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
栗子~~16 分钟前
java - logstash-logback-encoder 集成 demo
java·开发语言·logback
hmb↑29 分钟前
高并发与高可用技术经验
java·spring
楚识科技38 分钟前
XML配置OCR接入实战:自定义OCR模板从字段定义到API调用全流程
xml·java·ocr
小蒜学长1 小时前
基于Java的公司采购系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·公司采购系统
lee_tianbai1 小时前
Java SSM 电影票预定系统|完整前后端项目,开箱即用(源码分享)
java·开发语言·数据库
小坏讲微服务2 小时前
Spring Boot 4 新特性全解析:从上手到生产实战
java·spring boot·后端·架构·springboot4
砚底藏山河2 小时前
python量化入门:多周期数据对齐统一时间轴
java·数据库·python·金融·maven
集智飞行2 小时前
解决mavros2 ros2版本cpu占用高的问题
java·服务器·前端
鱼宵2 小时前
LangChain4j 结构化输出:让模型吐出 Java 对象,JSON 不再手写解析
java·开发语言·json·langchain4j