锁操作封装

//锁行为
	public static R doWithLock(String key,Object method,T param){
		Lock lock = null;
        //当然 getLock 和 unlock一个需要一个类似于随机数的东西来确认:解铃还须系铃人
		try {
			//获取锁
			lock = getLock(key);
			//上锁:需要保证阻塞
			lock.lock();
			//执行结果
			return invoke(method,param);
		}catch (Exception e) {
			throw e;
		}finally {
			if(null != lock) {
				lock.unlock();
			}
		}
		
	}
	//执行方法(当然,这里面的if else 完全可通过策略模式去做到,只是这里简单描述)
	private static R invoke(Object method, T param) {
		if(null == method) {
			return null;
		}else if(method instanceof Function) {
			Function function = (Function) method;
			return function.apply(param);
		}else if(method instanceof Consumer) {
			Consumer consumer = (Consumer) method;
			consumer.accept(param);
			return null;
		}
		return null;
	}

这就是jdk8带来的高级抽象的概念,将加锁的操作视为对象,这就屏蔽了业务层面对于锁的关注,完全只需要关注自己的实现即可,高度封装。如果考虑更多的话,会考虑在doWithLock方法处throws 一个lockexception,是为了抛出获取锁,加锁,解锁过程当中的异常,这样会提供给业务人员更多的情况考虑。

你可能感兴趣的:(工作,锁的高级封装)