執行緒併發redisson使用遇到的坑

2021-10-06 17:30:42 字數 589 閱讀 4954

背景

因為業務上的乙個購買需求,需要對庫存進行行程保護,防止超賣的出現(我們不是電商公司),經過調研,最終選擇使用redission來進行控制。主要因為redission豐富的api,開源框架,已經被廣泛應用於實際生產環境。

問題描述

問題分析

在thread-1還沒有結束的時候,也就是在thread-1在獲得鎖但是還沒有釋放鎖的時候, `thread-2由於被別的執行緒中斷停止了等待從lock.trylock的阻塞狀態中返回繼續執行接下來的邏輯,並且由於嘗試去釋放乙個屬於執行緒thread-1的鎖而丟擲了乙個執行時異常導致該執行緒thread-2結束了, 然而thread-2完成了一系列操作後,執行緒thread-1才釋放了自己的鎖. 所以thread-2並沒有獲得鎖,卻執行了需要同步的內容,還嘗試去釋放鎖。那解決方式我們就知道了,當前執行緒加的鎖由當前執行緒去解鎖,也就是說當我們使用lock.unlock的時候加上執行緒的判斷即可。

問題解決

rlock lock = redissonclient.

getlock

(key);if

(lock.

islocked()

)}

併發程式設計 執行緒的使用

新建狀態 執行new以後,還沒開始執行 就緒狀態 執行了start方法以後,等待cup分配時間執行run方法 執行狀態 執行run方法以後 阻塞狀態 sleep 鎖 阻塞佇列等 死亡狀態 執行完成或報出異常 public class extendscreate extends thread publ...

併發程式設計 執行緒的使用

from threading import thread from time import sleep 執行緒的實現 方式一 用方法實現 def func1 name print f threading start sleep 3 建立執行緒 t1 thread target func1,args ...

Android MediaMuxer使用遇到的問題

1.illegalstateexception問題 mediamuxer的使用必須嚴格遵循如下順序 addtrack start writesampledata stop release 如果有順序衝突或者多次呼叫start stop release,會導致illegalstateexception...