[发明专利]基于分布式锁的线程执行方法及装置、存储介质在审
申请号: | 202010045593.9 | 申请日: | 2020-01-16 |
公开(公告)号: | CN111259030A | 公开(公告)日: | 2020-06-09 |
发明(设计)人: | 徐亮 | 申请(专利权)人: | 平安医疗健康管理股份有限公司 |
主分类号: | G06F16/23 | 分类号: | G06F16/23;G06F9/46;G06F9/52 |
代理公司: | 北京中强智尚知识产权代理有限公司 11448 | 代理人: | 黄耀威 |
地址: | 200001 上海市黄浦*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 分布式 线程 执行 方法 装置 存储 介质 | ||
本申请公开了一种基于分布式锁的线程执行方法及装置、存储介质、计算机设备,该方法包括:缓存服务器基于来自客户端的加锁请求,向客户端分配分布式锁;客户端接收到分布式锁后,基于加锁请求建立任务线程以及监视线程;利用任务线程执行与加锁请求对应的待执行任务,以及通过监视线程对执行超时的任务线程作出中断标记;基于中断标记中断任务线程,并回滚任务线程对应的数据库资源。本申请利用所建立的监视线程对任务线程的超时执行行为进行监视作出中断标记,以便及时中断超时的任务线程并回滚相应的数据库资源,避免同一分布式锁被同时分配给多个线程以及避免分布式锁对应的数据库资源被同时调用产生脏数据。
技术领域
本申请涉及分布式锁技术领域,尤其是涉及到一种基于分布式锁的线程执行方法及装置、存储介质、计算机设备。
背景技术
在分布式环境下存在不同进程互斥地访问共享资源的问题。进程包含一个或多个线程,如果多个进程中的线程均需对共享资源进行操作,那么不同进程中线程访问共享资源时往往需要互斥访问,以防止彼此干扰。此情况下通常需要使用分布式锁。
在分布式锁中典型代表为Redis,在Redis中可以为一进程中的线程分配分布式锁,并且,设定分布式锁的使用时间,在该使用时间内该线程可以访问共享资源。
但是,在Redis存在一些等待访问共享资源的线程,在一个线程的分布式锁超时的情况下,可能会出现两个及以上线程获得分布式锁的异常情况。例如,进行DB读取时,可能存在数据库连接超时或者临时锁表或者JAVA层面FULL GC等一系列问题导致执行层面时间延长,本身运行时间超过了锁的锁定时间,相当于程序还没执行完,锁就失效了,在并发的情况下,如果又有一个请求进入,会直接拿到锁,程序中将会有两个线程执行一样的任务,产生脏数据。
发明内容
有鉴于此,本申请提供了一种基于分布式锁的线程执行方法及装置、存储介质、计算机设备,有助于避免两个及以上线程获得分布式锁的异常情况。
根据本申请的一个方面,提供了一种基于分布式锁的线程执行方法,包括:
缓存服务器基于来自客户端的加锁请求,向所述客户端分配所述分布式锁;
所述客户端接收到所述分布式锁后,基于所述加锁请求建立任务线程以及监视线程;
利用所述任务线程执行与所述加锁请求对应的待执行任务,以及通过所述监视线程对执行超时的所述任务线程作出中断标记;
基于所述中断标记中断所述任务线程,并回滚所述任务线程对应的数据库资源。
具体地,所述向所述客户端分配所述分布式锁,具体包括:
为与所述加锁请求匹配的分布式锁设定过期时间后,向所述客户端分配所述分布式锁;
所述所述客户端接收到所述分布式锁后,基于所述加锁请求建立任务线程以及监视线程,具体包括:
所述客户端接收到所述分布式锁后,将所述加锁请求对应的代理对象放入预先建立的线程池中,其中,所述代理对象包括所述任务线程以及待执行任务;
在所述线程池中为所述任务线程分配对应的所述监视线程,其中,所述监视线程在系统时间超过所述过期时间时判定所述任务线程执行超时。
具体地,所述利用所述任务线程执行与所述加锁请求对应的待执行任务,具体包括:
判断所述待执行任务是否已被写入事务中;
若未写入事务中,则建立包含所述待执行任务的事务后,利用所述任务线程执行所述事务;
若已写入事务中,则利用所述任务线程执行所述事务。
具体地,所述方法还包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于平安医疗健康管理股份有限公司,未经平安医疗健康管理股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010045593.9/2.html,转载请声明来源钻瓜专利网。