Java中的锁 | Sychronized & Lock 的区别
1. 相同点
- 用来做代码块的同步控制
- 都是可重入锁
2. 不同点
- 来源不同
- Synchronized是Java提供的关键字,属于Java语法层面的互斥锁,也称“隐式锁”。竞争锁、释放锁的过程开发者无需关心也不能干预,由JVM来完成。
- Lock是指
java.util.concurrent
包下的Lock接口,描述的是一把同步锁,由Java代码来控制多线程同步,也称“显式锁”。可以自己实现一把锁,也可以直接使用由并发大神Doug Lea编写的reentrantlock
。
- 锁的释放不同
- 性能不同
- 竞争锁失败的线程状态不同
- Synchronized竞争锁失败的线程状态是:BLOCKED。
- Lock竞争锁失败的线程状态是:WAITING。
- JVM堆栈跟踪
- Synchronized阻塞的线程更加便于JVM跟踪,使用jstack可以清楚的看到。
- Lock通过LockSupport.park()来阻塞线程,不利于JVM跟踪。
- 响应中断
- 锁超时
- 公平/非公平锁
- 尝试获取锁判断
- 读写锁
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。