Lock和Synchronized

Lock与Synchronized:

1、Synchronized无法判断是否获取锁的状态,Lock可以判断是否获取锁
2、Lock中的某些锁允许对共享资源的并发访问,如ReadWriteLock读写锁,readLock()获取读锁,writeLock()获取写锁,读锁可以被多个线程获取,写锁只能有一个线程持有。Synchronized锁不允许
3、Synchronized在代码块执行关闭或者出现异常的情况下会自动释放锁,不容易造成死锁,Lock锁需要在finally块中手动释放锁。
4、Lock支持获取锁尝试 tryLock,获取超时失效锁的尝试tryLock(long,TimeUnit),获取可中断锁的尝试lockInterruptibly。Synchronized会一直等待。synchronized是不可中断锁。
5、Lock支持公平锁和非公平锁。Synchronized是非公平锁,无法保证等待的线程获取锁的顺序。公平锁是尽量以请求锁的顺序来获取锁。
6、Lock和Synchronized都是可重入锁,可重入意味着一个线程可以进入任何一个它已经拥有的锁所同步着的代码块而不用重新获取锁。
7、因此Lock锁适合大量同步的代码的同步问题,Synchronized锁适合少量代码的同步问题

 

ReentrantLock与Synchronized:

  ReentrantLock Synchronized
灵活性 支持响应中断、超时、尝试获取锁 -
锁类型 公平锁&非公平锁 非公平锁
条件队列 可关联多个条件队列 关联一个条件队列
锁实现机制 依赖AQS 监视器模式
可重入性 可重入 可重入
释放形式 必须显示调用unlock()释放锁 自动释放监视器
posted @   杨岂  阅读(149)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示