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

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

相关推荐
Elias不吃糖14 小时前
Java Lambda 表达式
java·开发语言·学习
情缘晓梦.15 小时前
C语言指针进阶
java·开发语言·算法
南知意-16 小时前
IDEA 2025.3 版本安装指南(完整图文教程)
java·intellij-idea·开发工具·idea安装
码农水水17 小时前
蚂蚁Java面试被问:混沌工程在分布式系统中的应用
java·linux·开发语言·面试·职场和发展·php
海边的Kurisu17 小时前
苍穹外卖日记 | Day4 套餐模块
java·苍穹外卖
毕设源码-邱学长17 小时前
【开题答辩全过程】以 走失儿童寻找平台为例,包含答辩的问题和答案
java
他们叫我技术总监18 小时前
Python 列表、集合、字典核心区别
android·java·python
江沉晚呤时18 小时前
从零实现 C# 插件系统:轻松扩展应用功能
java·开发语言·microsoft·c#
梁下轻语的秋缘18 小时前
ESP32-WROOM-32E存储全解析:RAM/Flash/SD卡读写与速度对比
java·后端·spring
wanzhong233318 小时前
开发日记8-优化接口使其更规范
java·后端·springboot