【技术实现步骤摘要】
通过对象锁保护资源的方法和装置
[0001]本公开的实施例涉及计算机
,具体涉及通过对象锁保护资源的方法和装置。
技术介绍
[0002]JAVA开发工具包底层提供了两种锁机制,分别是ReentrantLock和Syncronized。ReentrantLock和Synchronized使用时均可以间接理解为锁定的是某一资源的程序引用地址,即要想达到资源保护,必须将资源封装到一个程序引用地址中(或一个代码块中),在JAVA中相等的字符串可以有不同的程序地址,相等的对象也可以有不同的程序地址,此时直接锁这个程序地址无法达到保护的目的。若资源的获取是个耗时的操作,当在一个虚拟机上多线程查询相同资源时,无法得到高效的保护,若使用这两种锁则需要把全部资源都锁住,会使吞吐量严重下降,获取资源变为串行;若使用分布式锁,同一个资源不同机器使用时会产生竞争,使用分布式锁会消耗网络资源,且分布式锁会有不稳定的时候。
技术实现思路
[0003]本公开的实施例提出了通过对象锁保护资源的方法和装置。
[0004]第一方面 ...
【技术保护点】
【技术特征摘要】
1.一种通过对象锁保护资源的方法,包括:响应于接收到对目标资源的访问请求,为所述目标资源的值关联一个新对象锁,并初始化所述新对象锁的属性信息,其中,所述属性信息包括:重入次数、持有锁的线程ID;查询锁池中是否存在所述目标资源,其中,锁池中存储了资源和对象锁的对应关系;若存在,则获取所述锁池中所述目标资源的对象锁的属性信息;若访问所述目标资源的线程的ID与所获取的属性信息中持有锁的线程ID一致,则所述对象锁的重入次数加1,成功获得所述目标资源的对象锁。2.根据权利要求1所述的方法,其中,所述方法还包括:若不存在,则尝试将所述目标资源和所述新对象锁放入所述锁池中;若放入成功,则所述新对象锁的重入次数加1,否则,访问所述目标资源的线程进入休眠状态,等待其它线程唤醒。3.根据权利要求1所述的方法,其中,所述属性信息还包括同步计数器,以及所述方法还包括:若访问所述目标资源的线程的ID与所述持有锁的线程ID不一致,则在所述目标资源的对象锁的同步计数器上执行等待,访问所述目标资源的线程进入等待状态。4.根据权利要求3所述的方法,其中,所述方法还包括:响应于检测到所述目标资源被释放,在所述锁池中查询所述目标资源对应的对象锁;将查询到的对象锁的属性信息中的重入次数减1。5.根据权利要求4所述的方法,其中,所述方法还包括:若查询到的对象锁的属性信息中的重入次数为0,则将所述对象锁从所述锁池中移除,并将同步计数器设置为0以唤醒其他等待的线程,成功释放所述对象锁。6.根据权利要求5所述的方法,其中,所述方法还包括:响应于接收到唤醒通知,若所述锁池中不存在所述目标资源,则尝试将所述目标资源和所述新对象锁放入所述锁池中;若放入成功,则所述新对象锁的重入次数加1,否则,访问所述目标资源的线程进入休眠状态,等待其它线程唤醒。7.根据权利要求1-6中任一项所述的方法,其中,所述查询锁池中是否存在所述目标资源,包括:将所述目标资源分别与锁池中各资源进行比较,判断是否存在相同对象值的资源。8.一种通过对象锁保护资源的装置,包括:构建单元,被配置成响应于接收到对目标资源的访问请求,为所述目标资源的值关联一个新对象锁,并初始化所述新对象锁的属性信息,其中,所述属...
【专利技术属性】
技术研发人员:孙彦旭,姚博勋,樊宁,
申请(专利权)人:京东科技控股股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。