9.11. 简述 synchronized 和 java.util.concurrent.locks.Lock 的异同
主要相同点: Lock 能完成 synchronized 所实现的所有功能
主要不同点: Lock 有比 synchronized 更精确的线程语义和更好的性能。 synchronized 会自
动释放锁,而 Lock 一定要求程序员手工释放,并且必须在 finally 从句中释放。 Lock 还有更强大的功能,例如,它的 tryLock 方法可以非阻塞方式去拿锁
相同点:
- 二者均可以用来保证多线程访问共享资源的同步,避免数据的冲突和不一致性。
- 都是可重入锁,即同一个线程可以重复获取锁。
- 都支持阻塞和非阻塞的锁获取方式。
不同点:
- synchronized 是 Java 语言内置的关键字,而 Lock 是一个 Java 接口,需要通过实现类来获得锁对象。
- synchronized 是独占锁,只能有一个线程获得锁,其他线程必须等待释放锁后才能进入,而 Lock 可以是独占锁,也可以是共享锁,可以有多个线程同时获得。
- synchronized 在发生异常时会自动释放锁,而 Lock 必须手动释放锁,因此在使用 Lock 时需要注意异常处理。
- synchronized 可以作用于普通方法、静态方法和代码块,而 Lock 只能作用于代码块。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论