synchronized 原理

简介: 以重量级锁为例,T0、T1线程竞争锁时,通过对象头获取或创建Monitor对象。T0通过CAS成功设置owner为自身,获得锁;T1失败后自旋重试,若期间锁被释放则成功获取,否则进入等待队列阻塞,待解锁后被唤醒重试。

以重量级锁为例,比如 T0、T1 两个线程同时执行加锁代码,已经出现了竞争(代码如下)

synchronized(obj) { // 加锁
    ...
} // 解锁
  1. 当执行到行1 的代码时,会根据 obj 的对象头找到创建此对象对应的 Monitor 对象(C++对象)
  2. 检查 Monitor 对象的 owner 属性,用 Cas 操作去设置 owner 为当前线程,Cas 是原子操作,只能有一个线程能成功
  1. 假设 T0 Cas 成功,那么 T0 就加锁成功,可以继续执行 synchronized 代码块内的部分
  2. T1 这边 Cas 失败,会自旋若干次,重新尝试加锁,如果
  1. 重试过程中 T0 释放了锁,则 T1 不必阻塞,加锁成功
  2. 重试时 T0 仍持有锁,则 T1 会进入 Monitor 的等待队列阻塞,将来 T0 解锁后会唤醒它恢复运行(去重新抢锁)
相关文章
|
4月前
|
Java 数据中心
Java 并发核心:CountDownLatch、CyclicBarrier、Semaphore 原理吃透 + 生产级实战
本文深度解析JUC三大核心并发工具:CountDownLatch(一次性等待)、CyclicBarrier(可重用屏障)和Semaphore(信号量限流)。从AQS原理、源码关键点、生产实战、易混淆对比到避坑指南,五维讲透多线程协作本质,助力高并发系统稳定落地。
465 1
|
3月前
|
缓存 安全 iOS开发
开源的 macOS 应用管理器和系统清理器
PureMac 是一款免费开源的 macOS 应用管理与系统清理工具,支持彻底卸载应用、清除残留文件及缓存日志等垃圾,释放磁盘空间。无订阅、无遥测、不收集任何用户数据,原生安全,智能扫描不误删。(239字)
406 1
|
9月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
542 1
|
9月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
850 6
|
存储 消息中间件 NoSQL
跟着大厂学架构01:如何利用开源方案,复刻B站那套“永不崩溃”的评论系统?
本文基于B站技术团队分享的《B站评论系统的多级存储架构》,解析其在高并发场景下的设计精髓,并通过开源技术栈(MySQL、Redis、Java)复刻其实现。文章深入讲解了多级存储、数据同步、容灾降级等关键设计,并附有完整代码实现,助你掌握大厂架构设计之道。
628 0
|
关系型数据库 MySQL 测试技术
记录一次后端接口抖动的排查过程
某天下午,测试新功能时发现页面接口偶尔变慢,平均十次调用中有三到四次出现3秒以上的延迟。排查了接口、数据库和服务器资源后未发现问题,最终锁定为K8s节点的负载均衡策略导致。测试环境仅有一个公网IP,SLB轮询四个Pod(其中三个为空),造成周期性延迟。移除空Pod后问题解决。
473 6
|
人工智能 监控 数据挖掘
工作流管理趋势:智能化、自动化与无限可能
本文深入探讨了工作流管理的定义、重要性、挑战及优化方法,强调其在提升企业效率、优化资源配置、提高透明度和促进协作等方面的作用。文章还介绍了构建高效工作流管理系统的步骤,包括流程梳理、设定KPIs、选择合适工具等,并分享了成功案例和未来趋势。
|
消息中间件 存储 缓存
一文了解清楚kafka消息丢失问题和解决方案
今天分享一下kafka的消息丢失问题,kafka的消息丢失是一个很值得关注的问题,根据消息的重要性,消息丢失的严重性也会进行放大,如何从最大程度上保证消息不丢失,要从生产者,消费者,broker几个端来说。
850 0
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
WK
|
机器学习/深度学习 算法 数据挖掘
PSO算法的应用场景有哪些
粒子群优化算法(PSO)因其实现简单、高效灵活,在众多领域广泛应用。其主要场景包括:神经网络训练、工程设计、电力系统经济调度与配电网络重构、数据挖掘中的聚类与分类、控制工程中的参数整定、机器人路径规划、图像处理、生物信息学及物流配送和交通管理等。PSO能处理复杂优化问题,快速找到全局最优解或近似解,展现出强大的应用潜力。
WK
1479 1

热门文章

最新文章