您现在的位置是:首页 >

多线程并发的处理方式 Java多线程同步如何从JVM的角度体会

火烧 2022-02-10 10:25:10 1053
Java多线程同步如何从JVM的角度体会   我们在使用Java多线程同步的时候需要了解很多的知识 其中Java多线程同步机制实际上是靠锁的概念来控制的 这个问题就需要我们引起注意 那么在Java程序

Java多线程同步如何从JVM的角度体会  

  我们在使用Java多线程同步的时候需要了解很多的知识 其中Java多线程同步机制实际上是靠锁的概念来控制的 这个问题就需要我们引起注意 那么在Java程序当中 锁是如何体现的呢?

  让我们从JVM的角度来看看锁这个概念

  在Java程序运行时环境中 JVM需要对两类线程共享的数据进行协调

   )保存在堆中的实例变量

   )保存在方法区中的类变量

  这两类数据是被所有线程共享的 (程序不需要协调保存在Java 栈当中的数据 因为这些数据是属于拥有该栈的线程所私有的 )

  在java虚拟机中 每个对象和类在逻辑上都是和一个监视器相关联的 对于对象来说 相关联的监视器保护对象的实例变量 对于类来说 监视器保护类的类变量

  (如果一个对象没有实例变量 或者一个类没有变量 相关联的监视器就什么也不监视 )

  为了实现监视器的排他性监视能力 java多线程同步虚拟机为每一个对象和类都关联一个锁 代表任何时候只允许一个线程拥有的特权 线程访问实例变量或者类变量不需锁 但是如果线程获取了锁 那么在它释放这个锁之前 就没有其他线程可以获取同样数据的锁了 (锁住一个对象就是获取对象相关联的监视器)

多线程并发的处理方式 Java多线程同步如何从JVM的角度体会

  类锁实际上用对象锁来实现 当虚拟机装载一个class文件的时候 它就会创建一个java lang Class类的实例 当锁住一个对象的时候 实际上锁住的是那个类的Class对象

  一个线程可以多次对同一个对象上锁 对于每一个对象 java虚拟机维护一个加锁计数器 线程每获得一次该对象 计数器就加 每释放一次 计数器就减 当计数器值为 时 锁就被完全释放了

  java多线程同步不需要自己动手加锁 对象锁是java虚拟机内部使用的 在java程序中 只需要使用synchronized块或者synchronized方法就可以标志一个监视区域 当每次进入一个监视区域时 java 虚拟机都会自动锁上对象或者类

lishixinzhi/Article/program/Java/gj/201311/27297  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码