「一分钟学Java」一张表讲明白Synchronized与Lock区别

Synchronized是Java内置的关键字,提供独占锁,适用于简单同步场景,而Lock是一个接口,提供了更灵活的同步机制,如可重入、可中断、可判断的锁,以及公平锁选项。Lock需手动管理锁释放,通常在finally块中。Lock的Condition允许更细粒度的线程调度,且能支持分布式锁实现。
摘要由CSDN通过智能技术生成

Synchronized与Lock区别

Synchronized与Lock区别
Synchronized与Lock在控制多线程操作中均有涉及,那么他们之间的区别是什么,又各自在什么场景下去使用呢?

以下表格帮你梳理。

SynchronizedLock
存在层次Java关键词,在JVM层面一个接口,JDK层面
锁的类型可重入 不可中断 非公平可重入 可判断 可公平,公平锁就是先等待的线程先获得锁。
锁的机制synchronized原始采用的是CPU悲观锁机制,即线程获得的是独占锁。
独占锁意味着其他线程只能依靠阻塞来等待线程释放锁。
Lock用的是乐观锁方式。
每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁实现的机制就是CAS操作。
锁的使用很明显Synchronized的使用比较方便简洁,并且由JVM保证锁的加锁和释放需要手工声明来加锁和释放锁,为了避免忘记手工释放锁造成死锁,所以最好在finally中声明释放锁。
锁的状态无法判断可以判断,Lock可以通过trylock来知道有没有获取锁
唤醒wait 、notify、notifyAll调度机制,要么随机唤醒一个,要么唤醒全部线程Lock可以使用Condition进行线程之间的调度,实现分组唤醒需要的线程
支持分布式仅限于单个实例分布式锁(结合Redisson)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值