} else {            //有竞争的后续看
        }
    }

无竞争,直接获取锁

先看下首先获取锁并释放锁背后的redis都在做什么,可以利用redis的monitor来在后台监控redis的执行情况。当我们在方法了增加@RequestLockable之后,其实就是调用lock以及unlock,下面是redis命令:

  • 加锁
    由于高版本的redis支持lua脚本,所以redisson也对其进行了支持,采用了脚本模式,不熟悉lua脚本的可以去查找下。执行lua命令的逻辑

  • 回获取锁失败

  • this.await返回true,进入循环尝试获取锁。

                        this.getEntry(threadId).getLatch().tryAcquire(time, TimeUnit.MILLISECONDS);
                            }http://www.cnblogs.com/ASPNET2008/p/6385249.html

                            time -= System.currentTimeMillis() - currentTime;
                        } while(time > 0L);

      &n
        
		

网友评论