//调用
public String doWork(){
if (getLock("lock")) {
doing();
}
delLock("lock");
}
public static boolean getLock(String lock) {
int expired=5000;
boolean success = false;
Jedis jedis = pool.getResource();
long value = System.currentTimeMillis() + expired + 1;
System.out.println(value);
long acquired = jedis.setnx(lock, String.valueOf(value));
//SETNX成功,则成功获取一个锁
if (acquired == 1)
success = true;
//SETNX失败,说明锁仍然被其他对象保持,检查其是否已经超时
else {
long oldValue = Long.valueOf(jedis.get(lock));
//超时
if (oldValue < System.currentTimeMillis()) {
String getValue = jedis.getSet(lock, String.valueOf(value));
// 获取锁成功
if (Long.valueOf(getValue) == oldValue)
success = true;
else
// 已被其他进程获得锁
success = false;
}
//未超时,则直接返回失败
else
success = false;
}
return success;
}
public static boolean delLock(String lock) {
jedis.del(lock);
}