zoukankan      html  css  js  c++  java
  • 同步方法调用另一个同步方法,锁机制问题

    public synchronized void methodA(int a, int b);

    public synchronized void methodB(int a){
    methodA(a, 0);
    }
    B方法可以执行吧……就是说B方法获得锁之后,调用的A方法也可以获得该锁?

     
     
    加在非static方法上的synchronized方法是和synchronized(this)块等价的,均为对象锁,即对this加锁。
    获得当前对象锁的线程,可以继续获得当前对象锁,JVM负责跟踪对象被加锁的次数。线程运行B方法,此时如果this锁可以用,线程获得该锁,线程给对象加锁,计数器变成1,然后B方法调用A方法,由于是对同一个对象同一个线程,线程可以继续获得锁,计数器变为2,表示this被加锁2次。A方法完毕后,线程释放锁,计数器变为1,此时对象锁对其他线程依然是不可获得的。B方法完毕后,线程继续释放锁,此时计数器变为0,表示锁被完全释放,其他线程可以获得对象锁。
     
    要明白两个问题,1.锁的对象是谁,2.谁持有了锁。
    假设方法A和B是在同一个类Test中的两个方法。

    Test t=new Test(); 
    t.methodB();
     
    可以,一个线程对同一个对象的锁可以反复获取。这种同步锁称为可重入的锁。
  • 相关阅读:
    MySQL教程22-字符串类型
    MySQL教程21-日期和时间类型
    MySQL教程20-小数类型
    MySQL教程19-整数类型
    MySQL教程18-数据类型简介
    ActiveMQ_topic
    ActiveMQ_消费者编码
    ActiveMQ_生产者编码
    ActiveMQ介绍
    管理docker容器
  • 原文地址:https://www.cnblogs.com/ganchuanpu/p/7797263.html
Copyright © 2011-2022 走看看