synchronized与Lock的区别

喜夏-厌秋 提交于 2020-02-23 00:56:03

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可以实现精确唤醒

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!