当一个线程拿到Lock锁之后,其锁定的是代码块,或是方法,或是对象 吗
非要说是锁定的话,就是lock和unlock中间的代码段,,,这个其实可以看下ReentrantLock的源码开下,本质是基于CAS实现的乐观锁
什么都没有锁定,同步的是代码块.
同步代码块的原因是lock只能被一个线程获取,当一个线程执行lock.lock()后其他线程再尝试获取会进入lock对象中的等待队列,从而达到同步效果
所以也可以说锁定指的是一个lock只能同时被一个线程占用
范围不就是从加锁到释放锁的中间那段吗
就是代码块。其他请求想要执行这个代码块会等待。
我理解的是:
被锁的范围是lock() 和 unlock () 之间的代码块。
但是Lock 对象如果定义在控制层或者service层,就是以代码逻辑+线程的维度上锁,类似于sync(this)
如果定义为入参对象中,那么锁的就是业务对象,例如: 入参是person , lock定义在person中的成员变量中,那么锁的就是线程+业务代码+person 的维度。
类似于sync(person),即相同的两个person之间是有群的,但是不同的person可以同时执行代码逻辑。
手机打的字,不太好贴代码。。。