【Java基础】7、Java同步机制之Monitor监视器与syncrhoized实现原理
2017-03-20 10:44
387 查看
一: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许可证
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监视器与syncrhoized实现原理
- 探索 Java 同步机制(Monitor Object 并发模式在 Java 同步机制中的实现)
- java基础复习之二:Java实现同步机制是(生产消费者)
- Java 中UDP原理机制及实现方式介绍(建议阅读者阅读前了解下Java的基础知识,一方便理解)
- Taglib原理和实现:再论El和JSTL标签-Java基础-Java-编程开发
- Chromium Graphics: GPU客户端之间同步机制的原理和实现分析-Part II
- Java的注解机制——Spring自动装配的实现原理
- [Java基础要义] HashMap的设计原理和实现分析
- java 多线程基础知识2---同步机制
- Chromium Graphics: GPU客户端之间同步机制的原理和实现分析-Part I
- Java实现同步机制(生产者消费者)
- Java实现同步机制(生产者消费者)
- java基础:Web服务器原理 以及 用java简单实现
- 黑马程序员——Java基础——多线程的同步、死锁和等待唤醒机制
- Java基础---hashmap的实现原理
- JAVA基础之理解JNI原理(java方式实现dll实例)
- 【转】Monitor Object 并发模式在 Java 同步机制中的实现
- java基础问题---java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用
- 探索 Java 同步机制[Monitor Object 并发模式在 Java 同步机制中的实现]