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

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

相关推荐
2301_780789664 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
学长毕设4 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
步行cgn5 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川5 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵5 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
秋天的怀念_David6 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas1006 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
niucloud-admin6 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
霸道流氓气质7 小时前
智能客服组件:分层意图识别、RAG Advisor 与人工转接状态机的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
captain3767 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis