本申请涉及计算机,尤其涉及一种同时添加分布式锁的方法和装置、电子设备和存储介质。
背景技术:
1、目前,在一些业务场景中,比如需要同一时刻同时读取多个订单对象,传统的订单获取采用加锁方式,比如通过@lock注解,对一个订单对象加锁,实现在同一时间,存在一个线程操作该订单对象,后来的线程阻塞,等待前面的线程执行完方法函数之后,再释放锁,其它线程再开始执行方法函数。
2、由上述可知,传统的加锁方式一次只能生成一个锁,即一次只能加一把锁,实际上不同的订单对象需要在同一时间均执行读取方法函数才能满足业务需求。
3、因此,相关技术存在无法满足一次加多把锁的需求的问题。
技术实现思路
1、本申请提供了一种同时添加分布式锁的方法和装置、电子设备和存储介质,以至少解决相关技术存在无法满足一次加多把锁的需求的问题。
2、根据本申请实施例的一个方面,提供了一种同时添加分布式锁的方法,该方法包括:
3、获取多个目标对象,生成加锁列表,其中,所述目标对象为待加锁的对象;
4、对所述加锁列表赋予全局锁;
5、在接收到所述全局锁加锁成功的指示信息的情况下,获取所述加锁列表内所述目标对象对应的拥有者标识信息;
6、在未获取到所述拥有者标识信息或者在确定所述拥有者标识信息为所述目标对象的原始标识信息的情况下,对所述目标对象进行加锁,直到当前所有的所述目标对象已加锁完成,释放所述全局锁。
7、根据本申请实施例的另一个方面,还提供了一种同时添加分布式锁的装置,该装置包括:
8、第一获取模块,用于获取多个目标对象,生成加锁列表,其中,所述目标对象为待加锁的对象;
9、添加模块,用于对所述加锁列表赋予全局锁;
10、第二获取模块,用于在接收到所述全局锁加锁成功的指示信息的情况下,获取所述加锁列表内所述目标对象对应的拥有者标识信息;
11、第一释放模块,用于在未获取到所述拥有者标识信息或者在确定所述拥有者标识信息为所述目标对象的原始标识信息的情况下,对所述目标对象进行加锁,直到当前所有的所述目标对象已加锁完成,释放所述全局锁。
12、可选地,第一获取模块包括:
13、获取单元,用于获取所述目标对象的账号信息;
14、生成单元,用于根据多个所述账号信息,生成所述加锁列表,并将所述加锁列表作为方法入参值。
15、可选地,该装置还包括:
16、阻塞模块,用于在对所述加锁列表赋予全局锁之后,在接收到所述全局锁加锁失败的指示信息的情况下,阻塞所有所述目标对象的执行线程。
17、可选地,该装置还包括:
18、生成模块,用于在所述获取所述加锁列表内所述目标对象对应的拥有者标识信息之前,根据所述拥有者标识信息,生成拥有者标识列表,其中,所述拥有者标识列表内所述拥有者标识信息与所述账号信息之间以键值对的方式存储;
19、第二释放模块,用于在未获取到所述拥有者标识列表的情况下,释放所述全局锁;
20、第一执行模块,用于执行所述对所述加锁列表赋予全局锁的步骤。
21、可选地,该装置还包括:
22、第三获取模块,拥有在所述生成拥有者标识列表之后,在获取到所述拥有者标识列表的情况下,根据所述键值对获取到与每个所述账号信息相对应的所述拥有者标识信息。
23、可选地,该装置还包括:
24、第三释放模块,用于在所述获取所述加锁列表内所述目标对象对应的拥有者标识信息之后,在确定存在所述拥有者标识信息不是所述目标对象的所述原始标识信息的情况下,发出加锁失败指示信息,释放已加锁成功的其他对象以及所述全局锁;
25、第二执行模块,用于执行所述对所述加锁列表赋予全局锁的步骤。
26、可选地,该装置还包括:
27、第一确定模块,用于在所述直到当前所有的所述目标对象已加锁完成,释放所述全局锁之后,根据所述目标对象确定业务类型;
28、第二确定模块,用于根据所述业务类型确定业务执行代码,完成对所述目标对象的业务处理。
29、根据本申请实施例的又一个方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;其中,存储器,用于存储计算机程序;处理器,用于通过运行所述存储器上所存储的所述计算机程序来执行上述任一实施例中的方法步骤。
30、根据本申请实施例的又一个方面,还提供了一种计算机可读的存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一实施例中的方法步骤。
31、在本申请实施例中,通过获取多个目标对象,生成加锁列表,其中,目标对象为待加锁的对象;对加锁列表赋予全局锁;在接收到全局锁加锁成功的指示信息的情况下,获取加锁列表内目标对象对应的拥有者标识信息;在未获取到拥有者标识信息或者在确定拥有者标识信息为目标对象的原始标识信息的情况下,对目标对象进行加锁,直到当前所有的目标对象已加锁完成,释放全局锁。由于本申请实施例通过生成加锁列表,利用全局锁对该加锁列表进行加锁,保证别的线程无法执行加锁操作,然后根据目标对象的拥有者标识信息去确定目标对象的锁是否被其他线程拥有或者该锁是否已被添加,在该锁未被添加或者该锁未被其他线程拥有时,对目标对象进行加锁,如此循环直到当前所有的目标对象已完成加锁之后,再释放全局锁即可,以上实现了同时添加锁的需求且应用范围广阔,进而解决了相关技术存在无法满足一次加多把锁的需求的问题。
1.一种同时添加分布式锁的方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述获取多个待加锁对象,生成加锁列表,包括:
3.根据权利要求1所述的方法,其特征在于,在对所述加锁列表赋予全局锁之后,所述方法还包括:
4.根据权利要求2所述的方法,其特征在于,在所述获取所述加锁列表内所述目标对象对应的拥有者标识信息之前,所述方法还包括:
5.根据权利要求4所述的方法,其特征在于,在所述生成拥有者标识列表之后,所述方法还包括:
6.根据权利要求1所述的方法,其特征在于,在所述获取所述加锁列表内所述目标对象对应的拥有者标识信息之后,所述方法还包括:
7.根据权利要求1至6任一所述的方法,其特征在于,在所述直到当前所有的所述目标对象已加锁完成,释放所述全局锁之后,所述方法还包括:
8.一种同时添加分布式锁的装置,其特征在于,所述装置包括:
9.一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口和所述存储器通过所述通信总线完成相互间的通信,其特征在于,
10.一种计算机可读的存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现权利要求1至7中任一项中所述的方法步骤。