文章插图
图上展示了ObjectMonitor的基本工作机制:
- 当多个线程同时访问一段同步代码时,首先会进入 _EntryList 队列中等待 。
- 当某个线程获取到对象的Monitor锁后进入临界区域,并把Monitor中的 _owner 变量设置为当前线程,同时Monitor中的计数器 _count 加1 。即获得对象锁 。
- 若持有Monitor的线程调用 wait() 方法,将释放当前持有的Monitor锁,_owner变量恢复为null,_count减1,同时该线程进入 _WaitSet 集合中等待被唤醒 。
- 在_WaitSet 集合中的线程会被再次放到_EntryList 队列中,重新竞争获取锁 。
- 若当前线程执行完毕也将释放Monitor并复位变量的值,以便其他线程进入获取锁 。
文章插图
下篇再讲一下Synchronized锁优化的过程 。
我是「一灯架构」,如果本文对你有帮助,欢迎各位小伙伴点赞、评论和关注,感谢各位老铁,我们下期见
文章插图
经验总结扩展阅读
- 通过netty把百度地图API获取的地理位置从Android端发送到Java服务器端
- 1 Java I/O:模型与流
- 五 SpringBoot - Java8 新特性
- JetBrains Fleet初体验,如何运行一个java项目
- 【Java】Java中的零拷贝
- 程序员有前途吗 未来前景好不好
- 北京程序员工资一般多少 薪资待遇高吗
- 武汉一般程序员工资多少 待遇好不好
- 一篇文章让你搞懂Java中的静态代理和动态代理
- 不允许还有Java程序员不了解BlockingQueue阻塞队列的实现原理