专栏名称: 鸿洋
你好,欢迎关注鸿洋的公众号,每天为您推送高质量文章,让你每天都能涨知识。点击历史消息,查看所有已推送的文章,喜欢可以置顶本公众号。此外,本公众号支持投稿,如果你有原创的文章,希望通过本公众号发布,欢迎投稿。
今天看啥  ›  专栏  ›  鸿洋

Android线程锁机制:monitor机制解析

鸿洋  · 公众号  · android  · 2024-08-06 08:35

主要观点总结

本文介绍了作者对Java在Android art平台下synchronized原理的探究和分享,包括锁的实现细节、锁的状态转换、锁升级过程以及wait和notify机制。

关键观点总结

关键观点1: synchronized底层实现原理

作者探究了Java在Android art平台下synchronized的实现原理,通过monitor监视器实现,涉及monitor-enter和monitor-exit指令。

关键观点2: 锁的状态和升级过程

对象通过LockWord维护锁状态,包括无锁状态、轻量级锁和重量级锁。轻量级锁通过cas方式获取,超过一定自旋次数会升级成重量级锁。锁升级过程涉及InflateThinLocked函数和Install函数。

关键观点3: wait和notify机制

对象调用wait、notify/notifyAll时需要在同步代码块里执行。wait会将线程标记为waiting状态并加入等待队列,notify和notifyAll会将等待线程移到竞争队列中。

关键观点4: 网站推荐

作者推荐了自己的网站wanandroid.com,提供详尽的知识体系、工具以及本公众号的文章合集。


文章预览

最近打算了解下死锁监控,于是先探究了下java在Android art平台synchronized的原理,看了下相关的源码,这里分享一下相关的实现细节。synchronized在底层是通过moniter监视器来实现的,获取锁的时候,会生成一个 monitor-enter 指令,释放锁的时候会生成一个 monitor-exit 指令。monitor的相关实现在 monitor.h 和 monitor.cc 里面。 1 monitor-enter 获取锁和锁升级过程 monitor-enter 在 Monitor::MonitorEnter 函数 .monitorEnter 里面会判断当前的锁状态,来决定是否需要锁升级。锁的状态维护在Object里的LockWord对象里面,每次 monitorEnter 的时候都会在死循环里面自旋判断LockWord的状态进行下一步操作: kUnlocked 无锁状态 当前是无锁状态,这里会通过cas升级到kThinLocked。 kThinLocked  轻量级锁 轻量级锁会判断lockword里面存储的线程id,如果当前线程已经持有锁了: 这里会把轻量级锁的数量加 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览