/*
  * (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#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());
     }
   }
 }