java 线程的生命周期和锁
线程的生命周期:
Thread.state枚举类共有6种状态:
- NEW:尚未启动的线程状态;
- RUNNABLE:jvm中执行的状态;
- BLOCKED:被阻塞等待监视器锁定的状态;
- WAITING:等待其他线程执行的状态;
- TIME_WAITING:达到执行等待时间的线程状态;
- TERMINATED:已退出线程的状态;
线程生命周期图:
- runnable:可以细分为 ready 和running状态,这个是逻辑上,但是不可查看,Thread,yeild()方法的作用在这里;
线程同步机制【保证数据的安全性】:任何同一时刻,最多只能有一个线程访问;
-
同步代码块
synchronized(对象) { //需要同步的代码块; }
-
同步方法
public sychronized void func(){ //需要同步代码; }
互斥锁:
- 每一个对象都对应于宇哥可称之为"互斥锁"的标记,用这个标记来保证任意时刻异能有一个线程访问该对象;
- 关键字:synchronized用来与对象的互斥锁联系,当某个对象用synchronized 来修饰,表明该对下给你在任意时刻只能有一个线程访问;
- 同步方法:
- 非静态的,默认是 this,也可以是其他对象【要求是对所有线程,是相同的一个对象】;
- 静态同步方法:默认为当前类本身【类名.class】;
- 线程死锁:几把锁,分别被线程占用,逻辑错误;
- 释放锁:
- 下面操作会释放锁
- 当前线程的同步方法、同步代码块执行结束;
- 在同步块、方法中,遇到 break,return;
- 在同步块、方法中,出现未处理的Error 或 Exception导致异常结束;
- 在同步块、方法中,执行了线程对象的wait() 方法,当前线程暂停,并释放锁;
- 下面操作不会释放锁:
- 在同步块、方法中,调用Thread.sleep()、 Thread.yield()方法暂停当前程序的执行;
- 在同步块、方法中,其他线程调用了该线程的suspend()方法,将该线程挂起;
- 下面操作会释放锁
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」