[發明專利]基于分布式鎖的線程執行方法及裝置、存儲介質在審
| 申請號: | 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.szxzyx.cn/pat/books/202010045593.9/2.html,轉載請聲明來源鉆瓜專利網。





