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更好控制...