1,synchronized属于jvm层面的,带有Synchronized语句块的class文件可以看到在同步代码块的起始位置插入了moniterenter指令,在同步代码块结束的位置插入了monitorexit指令。wait和notify只能在同步代码块和同步方法中使用。
Lock是java.util.concurrent.locks包下的,属于api层面的。
2,是否可以释放锁
synchronized不需要手动去释放锁,当synchroniz代码块执行完自动释放锁。
ReentrantLock则需要手动去释放锁,如果不释放则会产生死锁现象。lock()与unlock()要结合try/catch/finally来使用。
3,是否可以中断
synchronized不可以中断,要不异常退出要不正常运行完退出
ReentrantLock可中断,设置超时时间等
4,是否是公平锁
synchronized非公平锁
ReentrantLock默认非公平锁,构造方法传入true为公平锁,false为非公平锁。
5,锁绑定多个条件
synchronized要么唤醒一个要不全部唤醒
ReentrantLock可以实现精确唤醒
来源:CSDN
作者:一位IT女
链接:https://blog.csdn.net/weixin_44774355/article/details/104449846