转载自http://blog.sina.com.cn/s/blog_9385f6d90101dbqy.html

java会为每个object对象分配一个monitor,当某个对象的同步方法(synchronized methods )被多个线程调用时,该对象的monitor将负责处理这些访问的并发独占要求。

当一个线程调用一个对象的同步方法时,JVM会检查该对象的monitor。如果monitor没有被占用,那么这个线程就得到了monitor的占有权,可以继续执行该对象的同步方法;如果monitor被其他线程所占用,那么该线程将被挂起,直到monitor被释放。

当线程退出同步方法调用时,该线程会释放monitor,这将允许其他等待的线程获得monitor以使对同步方法的调用执行下去。

注意:Java对象的monitor机制和传统的临界检查代码区技术不一样。java的一个同步方法并不意味着同时只有一个线程独占执行,但临界检查代码区技术确实会保证同步方法在一个时刻只被一个线程独占执行。Java的monitor机制的准确含义是:任何时刻,对一个指定object对象的某同步方法只能由一个线程来调用。

java对象的monitor是跟随object实例来使用的,而不是跟随程序代码。两个线程可以同时执行相同的同步方法,比如:一个类的同步方法是xMethod(),有a,b两个对象实例,一个线程执行a.xMethod(),另一个线程执行b.xMethod().
互不冲突。

最新文章

  1. hibernate一对一外键单向关联
  2. zookeeper原理解析-选举
  3. RestTemplate配置
  4. HTML5移动Web开发(五)——移动设计之CSS媒介查询
  5. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) A
  6. Android Menu菜单使用
  7. ios开发--高德地图SDK使用简介
  8. hdu 1506(dp求最大子矩阵)
  9. asp.net将本地Excel上传到服务器并把数据导入到数据库
  10. IOS 图片模糊处理 ------ 直接代码 复制出去就可用 值得标记
  11. If We Were a Child Again
  12. 怎样把人物处理的清晰PS教程
  13. emmet(快速开发)的使用
  14. js事件中的event对象
  15. SpringBoot数据库读写分离之基于Docker构建主从数据库同步实例
  16. 从rnn到lstm,再到seq2seq(二)
  17. vm如何安装xenserver
  18. python3操作数据库 借助pycharm快速连接并操作mysql数据库
  19. 语法:c++对关于空指针0/NULL/nullptr三者的演变
  20. 最小顶点覆盖(Minimum Vertex Cover)与最大独立集(Maximum Independent Set)

热门文章

  1. lazy图片懒加载使用
  2. mysql启动脚本-my
  3. 【开源项目】一篇文章搞掂:Pig微服务框架
  4. Regex 正则零宽断言
  5. 漫谈C语言结构体
  6. mybatis的sqlprovider用法扩展自定义sql
  7. jquery 找到指定父级指定子集
  8. C++ STL rope 可持久化平衡树 (可持久化数组)
  9. J. The Volcano Eruption(圆相交+并查集)
  10. PHP代码审计基础