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

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、终止:当线程之行结束就是终止状态。

相关推荐
微尘寒风3 小时前
【Git】的安装和使用
java·git
y = xⁿ3 小时前
DeepSeek Harness 学习日记:关于Agent接口,工具调用的底层实现
android·java·学习
侧耳倾听1114 小时前
jwt使用简介
java·jwt
顶点多余4 小时前
那些在算法中适合巩固的知识点---1
java·前端·算法
AI人工智能+电脑小能手4 小时前
大白话说Java设计模式-46-责任链模式(业务实战篇)
java·设计模式·责任链模式·风控校验·servlet filter·spring interceptor·链式处理
jay神5 小时前
【计算机毕业设计】基于SpringBoot的程序教学辅助系统
java·前端·vue.js·spring boot·后端·毕业设计·课程设计
2601_962066495 小时前
【Sql Server】Update中的From语句,以及常见更新操作方式
android·java·数据库
yaoxin5211236 小时前
507. Java 反射 - 在 BeanFactory 中实现依赖注入
java·开发语言
OPEN-F6 小时前
C++模板教程:变参模板、折叠表达式与SFINAE
java·开发语言·c++
2601_962072217 小时前
SpringMVC进阶(自定义拦截器以及异常处理)
java