private static void lineLock(String lockkey) throws Exception {
try (Jedis jedis = _JedisPoolHash.getJedis();) {
//如果 ==0 代表存在 进入循环 等待获取锁
while (jedis.setnx(lockkey, String.valueOf(System.currentTimeMillis() + 5000)) == 0) {
//当前时间大于过期时间的前提下 必须大于 旧的值 并同时设置新的值如果不大于旧的值证明被其他机器并行设置了,则继续等待锁释放或过期
if (System.currentTimeMillis() > Long.valueOf(jedis.get(lockkey)) && System.currentTimeMillis() > Long
.valueOf(jedis.getSet(lockkey, String.valueOf(System.currentTimeMillis() + 5000)))) {
break;
}
try {
Thread.sleep(250);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}