Lock锁机制笔记
JDK 5.0 开始,
java.util.concurrent.locks.Lock
(控制多线程对共享资源进行访问的工具)提供了对共享资源的独占访问,每次都只能有一个线程对lock对象加锁,线程开始访问资源之前应先获得Lock对象
ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语言,在实现线程安全的控制中,其中最常用的就是ReentrantLock,可以显示加锁、释放锁。
class A{
private final ReentrantLock lock = new ReenTrantLock();
publick void m(){
lock.lock();
try{
//保证线程安全的代码;
}
finally{
lock.unlock();
//如果同步代码异常,要将unlock()写入finally语句块
//一般的都直接写上
}
}
}
syn锁与lock锁对比
-
lcok:显示锁,手动开关锁;syn隐式锁,出了作用于自动释放;
-
lock只有代码块锁;syn有代码块和方法锁;
-
lock锁,JVM花费较少时间来调度线程,性能更好,并且具有更好的扩展性(子类更多)
-
优先使用顺序:***lock > 同步代码块(已经进入方法体,分配了相应资源) > 同步方法(在方法体之外);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY