• 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许可证

                             

                         

  • 相关阅读:
    查询是哪个进程占用了特定端口
    (面向c#开发人员) 编写javascript的好习惯一 false 值
    onerror 事件 如何使用 onerror 事件捕获网页中的错误。(chrome、opera、safari 浏览器不支持)
    查找url里面的flag元素判断操作
    jquery 弹出窗
    向上滚动
    kissy helpcenter
    kissyAPI
    IE6 动态创建 iframe 无法显示的 bug 芒果
    图片轮换动画仿GIF
  • 原文地址:https://www.cnblogs.com/baxianhua/p/9376265.html
Copyright © 2020-2023  润新知