JAVA对象锁与类锁

1、被syncronized修饰的方法,是对类的对象加锁,也就是说,当对象访问该方法时,当前的对象会被加锁,同一时刻同一对象不能再访问该方法,或者该对象的其他被syncronized修饰的方法。不同对象,同一时刻可以访问同一个syncronized方法或其他syncronized方法,两个对象之间并不产生互斥关系。

2、被static、syncronized修饰的方法,是对类进行加锁,也就是说,同一时刻只有一个类能访问该方法。对象锁与类锁不会产生互斥关系。


如,Test 类有如下2个成员方法,被syncronized所修饰,

syncronized void funA(){...}
syncronized void funB(){...}

另有一个被syncronized所修饰的静态方法,

<strong>static</strong> syncronized funC(){...}

Test 类的两个实例, tatb ,则 ta tb 分别同时拥有funA()、funB()成员方法。

那么上面一段话可以解释如下:

1、在同一时刻,当ta对象去访问funA()方法时,ta对象就被锁定了,这时候ta是不能再去访问funB()方法了;直到ta访问funA()方法结束并对ta的锁释放后,ta才能继续访问funB()方法。

2、当ta对象去访问funA()方法时,此时ta对象被锁定了;假如同一时刻tb对象也想去访问funA()方法,是能成功访问的,此时tb对象被锁定了。因为tatb是两个不同的对象,各自都拥有funA()、funB()方法,对两个对象分别加锁,并不会产生互斥关系。

3、当ta / tb访问funX()方法时,假如此时想访问Test类的funC()方法,是能访问成功的。这也就是对象锁与类锁并不会产生互斥的关系。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值