<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      1.現(xiàn)在錯誤的用法:

      RLock lock = redisson.getLock(String.format(LOCK_KEY, 2));
      try {
      if (lock.tryLock()) {
      //處理
      logger.info("aaaaaaaaaaaaaaaaaa");
      } catch(Exception e) {
      //處理異常
      } finally {
      if (lock.isLocked()) {
      lock.unlock();
      }
      }
      測試實例:
      TwoThread.java

      public class TwoThread implements Runnable {
      private RedissonClient redisson;

      public TwoThread(RedissonClient redisson) {
      this.redisson = redisson;
      }

      private Logger logger = LogManager.getLogger(getClass());
      private String REWARD_CARD_LOCK_KEY = "444:lock:%d";

      public void run() {
      RLock lock = redisson.getLock(String.format(REWARD_CARD_LOCK_KEY, 2));
      logger.info("thread---{}, lock:{}",Thread.currentThread().getId(), lock);
      try {
      if (lock.tryLock()) {
      logger.info("tryLock thread---{}, lock:{}",Thread.currentThread().getId(),lock);
      logger.info("aaaaaaaaaaaaaaaaaa");
      }
      } finally {
      boolean locked = lock.isLocked();
      logger.info("thread---{},lock:{},locked:{}",Thread.currentThread().getId(),lock,locked);
      if (locked) {
      logger.info("thread unlock---{}, lock:{}",Thread.currentThread().getId(),lock);
      lock.unlock();
      }

      }
      }
      測試類:

      Thread one = new Thread(new TwoThread(redisson));
      Thread two = new Thread(new TwoThread(redisson));
      Thread three = new Thread(new TwoThread(redisson));
      Thread four = new Thread(new TwoThread(redisson));
      one.start();
      two.start();
      three.start();
      four.start();
      打印結果:

      thread---111, lock:org.redisson.RedissonLock@1cb2393f
      thread---112, lock:org.redisson.RedissonLock@70feb82b
      thread---114, lock:org.redisson.RedissonLock@50384a5d
      thread---113, lock:org.redisson.RedissonLock@42232129
      thread---111,lock:org.redisson.RedissonLock@1cb2393f,locked:true
      aaaaaaaaaaaaaaaaaa
      thread---113,lock:org.redisson.RedissonLock@42232129,locked:true
      thread---112,lock:org.redisson.RedissonLock@70feb82b,locked:true
      thread unlock---111, lock:org.redisson.RedissonLock@1cb2393f
      thread---114,lock:org.redisson.RedissonLock@50384a5d,locked:true
      thread unlock---114, lock:org.redisson.RedissonLock@50384a5d
      thread unlock---113, lock:org.redisson.RedissonLock@42232129
      thread unlock---112, lock:org.redisson.RedissonLock@70feb82b
      Exception in thread "Thread-20" Exception in thread "Thread-19" java.lang.IllegalMonitorStateException: attempt to unlock lock, not locked by current thread by node id: 54882863-3389-40e7-ba4d-58ecae0a7155 thread-id: 114
      at org.redisson.RedissonLock.unlock(RedissonLock.java:367)
      at xx.TwoThread.run(TwoThread.java:36)
      at java.lang.Thread.run(Thread.java:745)
      java.lang.IllegalMonitorStateException: attempt to unlock lock, not locked by current thread by node id: 54882863-3389-40e7-ba4d-58ecae0a7155 thread-id: 113
      at org.redisson.RedissonLock.unlock(RedissonLock.java:367)
      at xx.TwoThread.run(TwoThread.java:36)
      at java.lang.Thread.run(Thread.java:745)
      嘗試去解鎖,但是沒有被當前線程鎖住。

      boolean locked = lock.isLocked()為什么一直返回true,查看源碼,只要這個鎖被任意一個線程鎖,就會返回true

      /**
      * Checks if this lock locked by any thread
      *
      * @return <code>true</code> if locked otherwise <code>false</code>
      */
      boolean isLocked();
      所以,在finally里面 沒有被鎖就解鎖,肯定會報錯的。

      2.tryLock正確用法:

      RLock lock = redisson.getLock(String.format(REWARD_CARD_LOCK_KEY, 2));
      try {
      //嘗試加鎖,最多等待10秒,上鎖以后10秒自動解鎖
      if (lock.tryLock(10,10, TimeUnit.SECONDS)) {
      try {
      //處理
      logger.info("tryLock thread---{}, lock:{}", Thread.currentThread().getId(), lock);
      } catch (Exception e) {
      } finally {
      //解鎖
      lock.unlock();
      }
      }
      } catch (InterruptedException e) {
      //處理
      //保留中斷發(fā)生的證據(jù),以便調用棧中更高層的代碼能知道中斷,并對中斷作出響應
      Thread.currentThread().interrupt();
      }
      關于處理InterruptedException,文檔參考:

      https://www.ibm.com/developerworks/cn/java/j-jtp05236.html

      需要恢復中斷狀態(tài)場景的一個例子,方便理解:

      http://www.rzrgm.cn/softidea/p/4413374.html
      ————————————————
      版權聲明:本文為CSDN博主「qq_24664619」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接及本聲明。
      原文鏈接:https://blog.csdn.net/qq_24664619/article/details/103879692

      posted on 2023-04-20 18:39  張釋文  閱讀(205)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 精品国产一区二区三区av性色| 亚洲AV国产福利精品在现观看| 青铜峡市| 一区二区三区国产亚洲网站| 亚洲高清WWW色好看美女| 香蕉影院在线观看| a片免费视频在线观看| 亚洲国产精品无码一区二区三区| 欧美中文字幕无线码视频| 国产亚洲精品第一综合另类无码无遮挡又大又爽又黄的视频 | 亚洲V天堂V手机在线| 国产亚洲欧美日韩在线一区二区三| 亚洲精品熟女一区二区| 久久青青草原精品国产app| 亚洲精品码中文在线观看| 乱60一70归性欧老妇| 国产乱码精品一区二区上| 苍井空毛片精品久久久| 欧美高清freexxxx性| 性色av不卡一区二区三区| 在线中文字幕国产精品| 成人亚欧欧美激情在线观看| 国产亚洲精品日韩香蕉网| 日韩美a一级毛片| 狠狠cao日日穞夜夜穞av| 天天爽夜夜爱| 2018av天堂在线视频精品观看| 南部县| 国产 麻豆 日韩 欧美 久久| 阿坝县| 丰满人妻熟妇乱又仑精品| 高清中文字幕国产精品| 欧洲熟妇色xxxx欧美老妇多毛网站| 国产视频一区二区三区四区视频| 精品国产AV无码一区二区三区| 青草青草久热精品视频在线播放 | 无码人妻精品丰满熟妇区| 国产av中文字幕精品| 国产老熟女国语免费视频| 国产av一区二区久久蜜臀 | 麻豆国产成人AV在线播放|