lock锁

lock锁

1、如果是多个业务层(不同类),在类中都new了lock锁, 那么在并发的情况下, 这个锁是全局唯一的吗,在项目中, 有一个业务层的方法中获取到了这个锁, 另外的线程再其他的业务层,是不是也不能获取到这个锁了啊?还是说,2个类,new了2次, 就是2把锁了?两者间没有关系呢?

2、trylock,里面放时间,是当前如果没有获取到锁,不会立即返回结果,而是等待时间到了之后没有获取到锁返回结果吗?


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小尤 2021-11-16 18:30:10

同学你好,由于同学的问题是基于Lock接口的,而该接口的不同实现类会有差异,这里老师以常用的ReentrantLock实现作为案例为同学解答。
1、由于这个Lock是类中的成员变量,所以这个Lock的独立性仅限于在该类的对象中,也就是说在同一个对象中是唯一的。即使在并发情况下,由于是对同一个对象进行操作,所以Lock依然是唯一的。
同学所说的情况是:A线程获取了A业务层对象的Lock锁,B线程获取到的其实是B业务层对象的Lock锁,这两个锁本身就是不同的,并且其控制的对象也是不同的。
2、如果同学使用的是ReentrantLock,传入时间参数之后,如果尝试获取锁时,发现无法获取,那么不会理解返回结果,而是进行等待并且在等待时间结束之后进行重试。
祝学习愉快!

  • 提问者 rock221 #1

    明白了,1 ReentrantLock是一个成员变量, 作用域在当前的类中。 类中所有方法都可以用, 且唯一, 但是如果在其他的类中再new一个,就是一个新锁了。 对吧 。

    2使用多个synchronized,说明是多个锁, 且都是独立的, 对吧。 

    2021-11-18 09:23:05
  • 提问者 rock221 #2

    明白了,1 ReentrantLock是一个成员变量, 作用域在当前的类中。 类中所有方法都可以用, 且唯一, 但是如果在其他的类中再new一个,就是一个新锁了。 对吧 。

    2使用多个synchronized,说明是多个锁, 且都是独立的, 对吧。 


    2021-11-18 09:23:24
  • 好帮手慕小尤 回复 提问者 rock221 #3

    同学你好,同学理解是正确的。

    祝学习愉快!

    2021-11-18 09:42:25
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师