/* * (non-Javadoc) * @see com.lmiky.admin.lock.service.LockService#unlock(java.lang.String, java.lang.Long) */ public void unlock(String lockTarget, Long userId) throws LockException { synchronized (mutex) { try { String key = CACHE_HEAD + lockTarget; LockData lockData = (LockData) cache.get(key); if (lockData != null) { if (lockData.getUserId().equals(userId)) { cache.remove(key); } } } catch (CacheException e) { throw new LockException(e.getMessage()); } } }
/* * (non-Javadoc) * @see com.lmiky.admin.lock.service.LockService#isLock(java.lang.String) */ public boolean isLock(String lockTarget) throws LockException { synchronized (mutex) { try { String key = CACHE_HEAD + lockTarget; LockData lockData = (LockData) cache.get(key); if (lockData == null) { // 未被加锁 return false; } else if (System.currentTimeMillis() - lockData.getLockTime() > maxLockMillis) { // 超时 return false; } return true; } catch (CacheException e) { throw new LockException(e.getMessage()); } } }
/* (non-Javadoc) * @see com.lmiky.admin.lock.service.LockService#isLockByUser(java.lang.String, java.lang.Long) */ public boolean isLockByUser(String lockTarget, Long userId) throws LockException { synchronized (mutex) { try { String key = CACHE_HEAD + lockTarget; LockData lockData = (LockData) cache.get(key); if (lockData == null) { // 未被加锁 return false; } else if (!lockData.getUserId().equals(userId)) { return false; } lockData.setLockTime(System.currentTimeMillis()); return true; } catch (CacheException e) { throw new LockException(e.getMessage()); } } }
/* * (non-Javadoc) * @see com.lmiky.admin.lock.service.LockService#lock(java.lang.String, java.lang.Long, java.lang.String) */ public void lock(String lockTarget, Long userId, String userName) throws LockException { synchronized (mutex) { try { String cacheKey = CACHE_HEAD + lockTarget; LockData lockData = (LockData) cache.get(cacheKey); if (lockData == null) { // 未被加锁 lockData = new LockData(userId, userName, System.currentTimeMillis()); cache.put(cacheKey, lockData); } else if (!lockData.getUserId().equals(userId) && System.currentTimeMillis() - lockData.getLockTime() < maxLockMillis) { // 已经加锁,并且还未超时 throw new LockException("locked by " + lockData.getUserName(), lockData.getUserName()); } else { // 被自己加锁或者加锁超时 lockData.setUserId(userId); lockData.setUserName(userName); lockData.setLockTime(System.currentTimeMillis()); } } catch (CacheException e) { throw new LockException(e.getMessage()); } } }