转载请注意原文地址:http://www.cnblogs.com/ygj0930/p/6561667.html 

一:Monitor

Monitor是一个同步工具,相当于操作系统中的互斥量(mutex),即值为1的信号量。

它内置与每一个Object对象中,相当于一个许可证。拿到许可证即可以进行操作,没有拿到则需要阻塞等待。

二:syncrhoized实现原理

syncrhoized又叫做内置锁,为什么呢?因为使用syncrhoized加锁的同步代码块在字节码引擎中执行时,其实是通过锁对象的monitor的取用与释放来实现的。由上面我们直到Monitor是内置于任何一个对象中的,syncrhoized利用monitor来实现加锁解锁,故syncrhoized又叫做内置锁。

现在我们知道为什么用syncrhoized(lock)来加锁时,锁对象可以是任意对象了:

1:syncrhoized(lock)加锁时,用到的其实只是lock对象内置的monitor而已;

2:一个对象的monitor是唯一的,相当于一个唯一的许可证。拿到许可证的线程才可以执行,执行完后释放对象的monitor才可以被其他线程获取。

我们来讲解一下syncrhoized加锁的同步块的执行过程:

现在假设有代码块:  syncrhoized(Object lock){

同步代码...;

}

它在字节码文件中被编译为:monitorenter;//获取monitor许可证,进入同步块

同步代码...

monitorexit;//离开同步块后,释放monitor许可证

Java同步机制之Monitor监视器与syncrhoized实现原理相关推荐

  1. 探索 Java 同步机制[Monitor Object 并发模式在 Java 同步机制中的实现]

    探索 Java 同步机制[Monitor Object 并发模式在 Java 同步机制中的实现] https://www.ibm.com/developerworks/cn/java/j-lo-syn ...

  2. Java 同步机制浅谈(转贴) http://www.yuanma.org/data/2007/0523/article_2619.htm 中国源码网

    http://www.yuanma.org/data/2007/0523/article_2619.htm Java对多线程的支持与同步机制深受大家的喜爱,似乎看起来使用了synchronized关键 ...

  3. Java 反射机制和动态代理是基于什么原理,了解过吗?

    工作多年以及在面试中,我经常能体会到,有些面试者确实是认真努力工作,但坦白说表现出的能力水平却不足以通过面试,通常是两方面原因: 1."知其然不知其所以然". 做了多年技术,开发了 ...

  4. C# 线程同步之排它锁/Monitor监视器类

    一.Monitor类说明,提供同步访问对象的机制. 1.位于System.Threading命名空间下,mscorlib.dll程序集中. 2.Monitor通过获取和释放排它锁的方式实现多线程的同步 ...

  5. java同步机制简单介绍

    在java编程里经常听到类似的术语: 这个函数是不是同步的... 本文就简单介绍下什么是同步, java中同步的一些处理方法. 1.同步问题产生的原因 Java中同步问题是伴随这多线程而产生的, 也就 ...

  6. java同步机制:synchronized

    在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行.synchronized既可以加在一段代码上,也可以加在 ...

  7. Java 同步、异步

    1.同步与异步: 同步与异步通常来形容一次方法调用. 同步:方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为. 异步:方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者 ...

  8. 【Java并发编程(一)】并发设计原理

    一.并发设计原理 1. 基本概念 1.1 并发和并行 1.2. 同步 同步方式有两种: 控制同步:当一个任务的开始依赖于另一个任务的结束时,第二个任务不能在第一个任务完成之前开始. 数据访问同步:当两 ...

  9. java什么是monitor和Monitor监视器锁、对象布局

    文章目录 Monitor监视器锁 什么是moniter 对象布局 Monitor监视器锁 每个同步对象都有一个自己的Monitor(监视器锁),加锁过程如下图所示: 任何一个对象都有一个Monitor ...

最新文章

  1. 「AI初识境」深度学习中常用的损失函数有哪些?
  2. Android之Socket通信、List加载更多、Spinner下拉列表
  3. 组件三层_Angular 练级之旅(8)-Zorro Select组件的实现和进阶
  4. 两次服务器灾难事故的反思
  5. sharepoint 判断用户是否存在某个组中三种方法
  6. POJ 3084 Panic Room
  7. 在CentOS上安装Python3的三种方法
  8. [道理]关于人生的,很不错!
  9. 服务器实际显示内存,服务器实际显示内存
  10. 说唱计算机网红,首档喊麦节目太奇葩,蹭了说唱热度,还请了被封杀网红当导师...
  11. mysql MHA 集群搭建
  12. php memcache数据类型,php读取memcache二进制数据
  13. android中白色怎么表示,android – 将位图中特定颜色以外的所有颜色转换为白色...
  14. L298N模块驱动电机(实现pwm调速)
  15. 集装箱装柜计算机器在线,集装箱装柜数智能计算表
  16. CTF入门学习思维导图
  17. 小白尝试——去除apk流氓权限
  18. Docker 配置国内镜像源
  19. 微信公众号里放XLS链接教程
  20. linux kernel --- checksum相关ip_summed和feature字段解释

热门文章

  1. 深入Golang之sync.Pool详解
  2. ES6函数相关包含箭头函数
  3. mysql binlog 常用的命令
  4. 手机端滚动屏幕加载更多
  5. Sun Oracle服务器做磁盘raid
  6. etcd常用操作介绍
  7. Windows操作系统,启动Tomcat之后DOS窗口乱码处理
  8. 讲讲 MySQL 中的 WAL 策略和 CheckPoint 技术
  9. 关于Gossip协议的几个问题
  10. java数据结构之选择排序