/**
* 需要处理完成后调用unLock方法释放锁
*
*/
@Service
public class JvmLockImpl implements IJvmLock {
private static Logger logger = Logger.getLogger(JvmLockImpl.class);
private static ConcurrentHashMap<String,LockMeta> map= new ConcurrentHashMap<String, LockMeta>();
private static ReentrantLock lock = new ReentrantLock();
@Override
public boolean lock(String key,int exprie){
if (map.containsKey(key)) {
LockMeta meta = map.get(key);
if(meta.isLose()){//已经超时 释放
unlock(key);
}else{
return false;
}
}
lock.lock();
try {
if (map.containsKey(key)) {
return false;
}
LockMeta meta=new LockMeta();
meta.setLockTime(System.currentTimeMillis());
meta.setExpireTime(exprie);
map.putIfAbsent(key, meta);
} catch (Exception ex) {
logger.error(ex.getMessage());
return false;
} finally {
lock.unlock();
}
return true;
}
@Override
public void unlock(String key){
try {
map.remove(key);
}
catch (Exception ex){
ex.printStackTrace();
logger.error(ex);
}
}
}
JVM锁
最新推荐文章于 2024-07-09 21:51:01 发布