zoukankan      html  css  js  c++  java
  • Synchronized的理解

    Synchronized是由JVM实现的一种互斥同步的一种方式,如果查看Synchronized修饰过的程序块编译后的字节码,会发现,被Synchronized修饰过的程序块,在编译前后被编译器生成了monitorenter和monitorexit两个字节码指令;

    这两个指令的含义:在虚拟机执行到monitorenter指令时,首先要尝试获取对象的锁,如果这个对象没有锁定,或者当前线程已经拥有了这个对象的锁,把锁的计数器+1;当执行monitorexit指令时,将锁计数器-1;当计数器为0时,锁就被释放了;

    java中synchronized通过在对象头设置标记,达到了获取锁和释放锁的目的;

    Sychronized是可重入锁,主要是为了解决自己锁死自己的情况;当同一个类的的两个同步方法使用同一把锁时且两个方法有调用关系存在,如果不支持重入,B方法调用A方法时,A方法去获取锁需等B方法释放,然后就造成阻塞,导致自己锁死自己

  • 相关阅读:
    python 线程之 数据同步 Queue
    python 线程之threading(五)
    python 线程之 threading(四)
    python 线程之 threading(三)
    php-属性和方法的重载
    wordpress-4.7.2-zh_CN页面加载慢
    php-__autoload()
    php-_toString()方法
    php-final
    php-parent::和self::
  • 原文地址:https://www.cnblogs.com/zpp1234/p/12627327.html
Copyright © 2011-2022 走看看