个人理解记录
超时锁的基本原理与独占锁基本相同,不同之处在于“超时”,在调用doAcquireNanos时,首先记录下调用方法的时间,然后尝试获取锁,如过获取成功则直接返回,如果获取失败,判断超时时间是否为0,如果是,则时间超时,返回false,如果不是,则获取当前时间-进入方法的时间,然后在用超时时间-这个结果,得到超时剩余时间,如果剩余超时时间大于1000毫秒,则利用LockSupport挂起当前线程剩余时长,否则进入自旋,避免超时时间精度出现偏差。
非可中断锁当客户端调用interrupt方法时,只是简单的去设置interrupted中断状态,并没有进一步抛出异常,而可中断锁在利用thread.interrupted监测到中断请求时会抛出interruptedexception,进而中断线程执行。