Java高併發程式設計 巧用Memcache做高併發鎖

2021-08-16 13:16:48 字數 425 閱讀 6631

2023年08月08日草稿

我們假設要做乙個拍賣系統,誰先下單,那麼就鎖定這個商品設定memcache裡的資料 ,等待支付。那麼一般流程是怎樣的呢?

我們假設:

商品id:1001

使用者a id:2001

使用者b id:2002

商品a被使用者a鎖定的資料狀態為:

key:lock_1001

value:2001

假設商品還沒有被鎖定,a、b同時查詢這個商品有沒有被鎖定,結果是a、b操作執行緒在memcache裡都沒查到這個值。然後進行加鎖,這就導致了a、b操作執行緒同時執行導致業務錯誤。高併發下get和keyexits判斷結果會出現一樣的結果。

由於memcache的add操作具有原子性,可以通過返回false和true來加鎖。

Java高併發程式設計筆記

jmm記憶體模型之 可見性 可見性是指當乙個執行緒修改了某乙個共享變數的值,其他執行緒是否能夠立即知道這個修改。jmm記憶體模型之 有序性 有序性問題的原因是因為程式在執行時,可能會出現指令重排,重排後的指令的順序未必一致。一條指令的執行可以分為很多步驟的 簡單來說就是以下幾步 1 取指if 2 解...

Java高併發程式設計之CountDownLatch

儘管這是挺好的解決辦法,當絕對談不上最佳,本篇文章進一步講解更優的解決方案。使用latch 門閂 替代wait notify來進行通知,其好處是通訊方式簡單,同時也可以指定等待時間。countdownlatch不涉及鎖定,當count的值為零的時候當前執行緒繼續執行。當不涉及同步,只是涉及執行緒通訊...

實戰Java高併發程式設計(三)JDK並發包

同步控制 重入鎖 重入鎖可以完全替代synchronized關鍵字。其使用方法如下 public reentrantlock lock new reentrantlock public void run finally 由於其通過人工進行lock和unlock,因此比synchronized更好控制...