「一分钟学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 陕西

相关推荐

02-14 12:40
门头沟学院 Java
程序员花海:1.面试要求必须Java笔试不一定 2.难度对等秋招 远超于日常实习是因为同一批次且转正很多 竞争压力大 3.第一个加点指标,上线了就把接口性能加上去 使用本地缓存这个不算亮点 只是技术选型,要把为什么采用这个和背后的思考写出来而不是单纯堆叠技术没意义 4.八股要一直看 很容易忘记 5.拼团交易这个老问题 堆积技术 另外建议你把奖项合并到教育背景 没必要拆出来放最后
我的简历长这样
点赞 评论 收藏
分享
评论
2
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务