自定义锁管理器

public class LockManager {


private Object semaphore = new Object();


private ConcurrentMap<String, ConcurrentMap<Object, Object>> lockMap = new ConcurrentHashMap<String, ConcurrentMap<Object, Object>>();


private boolean getLock(String lockType, Object key) {
synchronized (this.semaphore) {
ConcurrentMap<Object, Object> map = (ConcurrentMap<Object, Object>) this.lockMap.get(lockType);
if (map == null) {
map = new ConcurrentHashMap<Object, Object>();
this.lockMap.put(lockType, map);
}
return (map.putIfAbsent(key, key) == null);
}
}


public void getLock(String lockType, Object key, long timeout) throws TimeoutException {
Boolean flag = false;
if (timeout <= 0L) {
flag = true;
}


long beginTime = System.currentTimeMillis();
long endTime = beginTime + timeout;
while (!(getLock(lockType, key))) {
try {
Thread.sleep(100L);
} catch (InterruptedException localInterruptedException) {
}
if ( !flag && System.currentTimeMillis() >= endTime)
throw new TimeoutException();
}
}


/**
* 是否指定的锁类型,当前锁的数量为空
* @param lockType
* @return
*/
public boolean isEmptyLock(String lockType){
if (null != this.lockMap.get(lockType)){
return this.lockMap.get(lockType).size() == 0;
} else {
return false;
}
}

public void releaseLock(String lockType, Object key) {
synchronized (this.semaphore) {
ConcurrentMap<Object, Object> map = (ConcurrentMap<Object, Object>) this.lockMap.get(lockType);
if (map != null)
map.remove(key);
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值