Synchronized和Lock的区别
synchronized与Lock的主要区别如下:
一、 synchronized是Java的内置关键字,而Lock是接口,其常用实现类为ReentrantLock(可重入锁)和ReentrantReadWriteLock(读写锁);
二、 synchronized是隐式的加锁,这个流程自动化,而Lock是显式的加锁,需要手动的lock()和unlock();
三、 synchronized常作用于代码块或方法上,而Lock只能作用于方法块;
四、 synchronized底层在方法上使用了 ACC_SYNCHRONIZED 来加锁,在代码块上使用了monitorenter(标注开始)和monitorexit(标注结束)指令来标注同步代码块,而Lock采用的AQS;
五、 synchronized是阻塞式加锁,Lock 是非阻塞式加锁支持可中断式加锁,支持超时时间的加锁;
六、 synchronized在进行加锁解锁时,只有一个同步队列和一个等待队列,Lock有一个同步队列,可以有多个等待队列;
七、 synchronized只支持非公平锁,Lock 支持非公平锁和公平锁;
八、 synchronized使用了 object 类的 wait 和 notify 进行等待和唤醒,Lock 使用了 condition 接口进行等待和唤醒(await和signal);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通