zoukankan      html  css  js  c++  java
  • synchronized 的实现与Monitor监视器

    Monitor是一个同步工具,相当于操作系统中的互斥量(mutex),即值为1的信号量。
    它内置与每一个object对象中,相当于一个许可证。拿到许可证既可以进行操作,没有难道则需要阻塞等待。

    synchronized 实现原理

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

    1、现在我们知道为什么用synchronized(lock)来加锁的时候,锁对象可以是任意对象了

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

    我们来讲解一下syncrhoized加锁的同步块的执行过程:
    
    现在假设有代码块:
    
    syncrhoized(Object lock){
    
    同步代码...;
    
    }
    
    

    它在字节码文件中被编译为:monitorenter;//获取monitor许可证,进入同步块
    同步代码...
    monitorexit;//离开同步块后,释放monitor许可证

  • 相关阅读:
    分析WordPress数据表之用户表(功能篇)
    Android.mk简介:
    win10 mars xlog编译
    sudo apt-get install libstdc++6
    WebRTC 入门教程(二)| WebRTC信令控制与STUN/TURN服务器搭建
    Mars Android 接入指南
    Mars Sample 使用说明
    RxJava2 方法总结
    mqtt client api: 阻塞API
    idea使用git进行项目管理
  • 原文地址:https://www.cnblogs.com/nineberg/p/13534521.html
Copyright © 2011-2022 走看看