Java同步机制之Monitor监视器与syncrhoized实现原理
转载请注意原文地址: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实现原理相关推荐
- 探索 Java 同步机制[Monitor Object 并发模式在 Java 同步机制中的实现]
探索 Java 同步机制[Monitor Object 并发模式在 Java 同步机制中的实现] https://www.ibm.com/developerworks/cn/java/j-lo-syn ...
- Java 同步机制浅谈(转贴) http://www.yuanma.org/data/2007/0523/article_2619.htm 中国源码网
http://www.yuanma.org/data/2007/0523/article_2619.htm Java对多线程的支持与同步机制深受大家的喜爱,似乎看起来使用了synchronized关键 ...
- Java 反射机制和动态代理是基于什么原理,了解过吗?
工作多年以及在面试中,我经常能体会到,有些面试者确实是认真努力工作,但坦白说表现出的能力水平却不足以通过面试,通常是两方面原因: 1."知其然不知其所以然". 做了多年技术,开发了 ...
- C# 线程同步之排它锁/Monitor监视器类
一.Monitor类说明,提供同步访问对象的机制. 1.位于System.Threading命名空间下,mscorlib.dll程序集中. 2.Monitor通过获取和释放排它锁的方式实现多线程的同步 ...
- java同步机制简单介绍
在java编程里经常听到类似的术语: 这个函数是不是同步的... 本文就简单介绍下什么是同步, java中同步的一些处理方法. 1.同步问题产生的原因 Java中同步问题是伴随这多线程而产生的, 也就 ...
- java同步机制:synchronized
在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行.synchronized既可以加在一段代码上,也可以加在 ...
- Java 同步、异步
1.同步与异步: 同步与异步通常来形容一次方法调用. 同步:方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为. 异步:方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者 ...
- 【Java并发编程(一)】并发设计原理
一.并发设计原理 1. 基本概念 1.1 并发和并行 1.2. 同步 同步方式有两种: 控制同步:当一个任务的开始依赖于另一个任务的结束时,第二个任务不能在第一个任务完成之前开始. 数据访问同步:当两 ...
- java什么是monitor和Monitor监视器锁、对象布局
文章目录 Monitor监视器锁 什么是moniter 对象布局 Monitor监视器锁 每个同步对象都有一个自己的Monitor(监视器锁),加锁过程如下图所示: 任何一个对象都有一个Monitor ...
最新文章
- 「AI初识境」深度学习中常用的损失函数有哪些?
- Android之Socket通信、List加载更多、Spinner下拉列表
- 组件三层_Angular 练级之旅(8)-Zorro Select组件的实现和进阶
- 两次服务器灾难事故的反思
- sharepoint 判断用户是否存在某个组中三种方法
- POJ 3084 Panic Room
- 在CentOS上安装Python3的三种方法
- [道理]关于人生的,很不错!
- 服务器实际显示内存,服务器实际显示内存
- 说唱计算机网红,首档喊麦节目太奇葩,蹭了说唱热度,还请了被封杀网红当导师...
- mysql MHA 集群搭建
- php memcache数据类型,php读取memcache二进制数据
- android中白色怎么表示,android – 将位图中特定颜色以外的所有颜色转换为白色...
- L298N模块驱动电机(实现pwm调速)
- 集装箱装柜计算机器在线,集装箱装柜数智能计算表
- CTF入门学习思维导图
- 小白尝试——去除apk流氓权限
- Docker 配置国内镜像源
- 微信公众号里放XLS链接教程
- linux kernel --- checksum相关ip_summed和feature字段解释