synchronized 关键字对于锁的一些优化

简介: synchronized 关键字对于锁的一些优化

synchronized 关键字默认采用的是偏向锁。

1. 在程序运行中,如果始终只有一个线程去获取 synchronized 这个锁的话,在 Java 对象中会记录一个线程的 ID,所以在下次获取 synchronized 锁的时候,只需要比较这个线程 ID 就行了。

2. 在程序运行过程中,如果有第二个线程去请求 synchronized 锁的时候,这里就要分成两种情况。

(1)第一种是在没有发生并发竞争锁的情况下,synchronized 会自动升级为轻量级锁,这个时候第二个线程就会尝试自旋锁的方式来获取锁,因为很快就能拿到锁,所以第二个线程也不会被阻塞。

(2)第二种情况是如果这两个线程出现竞争锁的话,synchronized 会升级为重量级锁,这个时候就只有一个线程可以获得锁,另一个线程就会被阻塞到,只有第一个线程释放锁之后,第二个线程才能拿到锁。

相关文章
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-541 呱娃子
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-541 呱娃子
83 0
|
前端开发 JavaScript Java
v-for比v-if优先级更高?面试官:回去等通知吧
v-for比v-if优先级更高?面试官:回去等通知吧
109 0
|
存储 缓存 Linux
操作系统与内核、系统编程与应用编程
操作系统与内核、系统编程与应用编程
263 0
|
缓存 NoSQL 中间件
redis如何通过读写分离来承载读请求高并发
redis如何通过读写分离来承载读请求高并发
201 0
|
并行计算 测试技术 异构计算
JAX 中文文档(一)(5)
JAX 中文文档(一)
268 0
【题解】—— LeetCode一周小结26
LeetCode每日一道一周小结26
52 0
|
SQL JSON 运维
如何使用下探分析定位多维指标异常根因
在系统运维过程中,关键指标的异常变化往往意味着服务异常、系统故障等等。因此我们往往会对一些关键指标进行自动巡检,例如异常检测和时序预测等等,及时感知指标的异常变化,了解系统的健康状况。对于复杂系统来说,感知到异常后直接在系统层面根因定位可能是十分困难的。因此我们需要一些手段缩小问题的排查范围或者直接定位问题,如使用 trace 根因分析等等。阿里云日志服务上线了下探分析功能,用于多维指标异常根因定位。我们将介绍该功能的使用场景和使用案例。
1102 0
如何使用下探分析定位多维指标异常根因
|
小程序 安全 前端开发
从零玩转系列之微信支付实战PC端支付微信取消接口搭建1
从零玩转系列之微信支付实战PC端支付微信取消接口搭建
171 0
从零玩转系列之微信支付实战PC端支付微信取消接口搭建1
|
网络协议 应用服务中间件 API
Servlet的常用Api—HttpServletResponse
Servlet的常用Api—HttpServletResponse
272 0
Servlet的常用Api—HttpServletResponse
|
前端开发
SCSS随笔-mixin与@extend
SCSS随笔-mixin与@extend
98 0