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);

posted @   RS_mine  阅读(469)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示