自学Java第四十课
今天学习线程中的线程同步。
2.1同步代码块
锁多条语句操作共享数据
格式:synchronized(任意对象){多条语句操作共享数据代码块},任意对象为"锁"。
同步好处:解决了多线程的数据安全问题;弊端:线程很多时,每个线程都会判断同步上的锁,降低运行效率。
2.2同步方法
把synchronized关键字加到方法上,格式:修饰符 synchronized 返回值类型 方法名(参数){}
同步方法锁对象:this
同步静态方法:把synchronized关键字加到静态方法,格式:修饰符 synchronized 返回值类型 方法名(参数){}
静态锁对象:类名.class
2.3线程安全的类
StringBuffer:线程安全,可变的字符序列,被StringBuilder代替
Vector:使用ArrayList代替
Hashtable:该类实现了一个哈希表,将键映射到值,任何非null对象都可以做键和值。使用HashMap代替。
StringBuffer、Vector、Hashtable的源码使用了synchronized关键字,所以是线程安全类。
2.4Lock锁
Lock实现提供比使用synchronized()方法和语句可获得更广泛的锁定操作。
void lock():获得锁;void unlock():释放锁
lock是接口,不能直接实例化,采用类Reentrantlock实例化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署