博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
说说你对synchronized同步块的了解吧?
阅读量:6833 次
发布时间:2019-06-26

本文共 683 字,大约阅读时间需要 2 分钟。

  hot3.png

    synchronized关键字用来实现在并发编程中线程间的同步,synchronized相对于volatile关键字实现的是基于对象锁的同步,在java中每个对象都可以同步的锁。synchronized支持有实例方法、静态方法、实例方法中的同步块、静态方法中的同步块。

 

参考资料:

  • 对于同步方法,锁是当前实例对象。
  • 对于静态同步方法,锁是当前对象的Class对象。
  • 对于同步方法块,锁是Synchonized括号里配置的对象。

4 同步的原理

JVM规范规定JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,但两者的实现细节不一样。代码块同步是使用monitorenter和monitorexit指令实现,而方法同步是使用另外一种方式实现的,细节在JVM规范里并没有详细说明,但是方法的同步同样可以使用这两个指令来实现。monitorenter指令是在编译后插入到同步代码块的开始位置,而monitorexit是插入到方法结束处和异常处, JVM要保证每个monitorenter必须有对应的monitorexit与之配对。任何对象都有一个 monitor 与之关联,当且一个monitor 被持有后,它将处于锁定状态。线程执行到 monitorenter 指令时,将会尝试获取对象所对应的 monitor 的所有权,即尝试获得对象的锁。

(注:32bitJVM)

091314_QXDp_914290.png

http://www.cnblogs.com/paddix/p/5367116.html

转载于:https://my.oschina.net/u/914290/blog/801043

你可能感兴趣的文章
可应用于实际的14个NLP突破性研究成果(三)
查看>>
[LeetCode] 41. First Missing Positive
查看>>
阿里如何将“高峰前扩容、高峰后缩容”的梦想照进现实?
查看>>
分布式系统关注点——初识「高可用」
查看>>
Node.js学习之路22——利用cheerio制作简单的网页爬虫
查看>>
聊一聊我对 React Context 的理解以及应用
查看>>
很多程序员都不会的问题,你知道多少?
查看>>
Scrapy-redis分布式组件
查看>>
package.json里的一些属性讲解
查看>>
leetcode 12 Integer to Roman
查看>>
Swoole+Lumen:同步编程风格调用MySQL异步查询
查看>>
探索 JUC 之美---Future 与 FutureTask
查看>>
《Java RESTful Web Service实战》第一章的实现补漏
查看>>
smarty 中的for循环
查看>>
gitlab+jenkins+maven+docker持续集成(十一)——sonarqube及sonarscanner代码审查
查看>>
linux5中实现DNS转换
查看>>
Windows Server 2003域环境搭建
查看>>
创建CA 和申请证书
查看>>
Linux 下统计文件夹大小及文件数量
查看>>
pgbackrest 简要使用说明
查看>>