主要观点总结
本文介绍了作者对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,如果当前线程已经持有锁了: 这里会把轻量级锁的数量加
………………………………