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

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

    一:Monitor工具

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

      它内置与每个Object对象中,至关于一个许可证。拿到许可证便可以进行操做,没有拿到则须要阻塞等待。操作系统

 

    二:syncrhoized实现原理线程

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

       如今咱们知道为何用syncrhoized(lock)来加锁时,锁对象能够是任意对象了:对象

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

       2:一个对象的monitor是惟一的,至关于一个惟一的许可证。拿到许可证的线程才能够执行,执行完后释放对象的monitor才能够被其余线程获取。get

 

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

       如今假设有代码块:  syncrhoized(Object lock){

                                                                         同步代码...;

                                    }

 

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

                                             同步代码...

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

相关文章
相关标签/搜索