「一分钟学Java」Synchronized与Lock区别

Synchronized与Lock区别

概述

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

以下表格帮你梳理。

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

每天一分钟,利用碎片时间,助你上岸!!!

全部评论
本质区别是什么?
点赞 回复 分享
发布于 2023-05-03 22:45 陕西

相关推荐

求面试求offer啊啊啊啊:把华北改为华南再试一试,应该就没啥问题了。改完可能都不用投,别人主动联系了。
点赞 评论 收藏
分享
SHC2:关键问题是你这三段实习是三个不同的岗位…你这样子秋招就是只有一段实习的本科生..
点赞 评论 收藏
分享
评论
2
5
分享

创作者周榜

更多
牛客网
牛客企业服务