鎖操作封裝

//鎖行爲
	public static <T,R>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 <T,R>R invoke(Object method, T param) {
		if(null == method) {
			return null;
		}else if(method instanceof Function) {
			Function<T, R> function = (Function<T, R>) method;
			return function.apply(param);
		}else if(method instanceof Consumer) {
			Consumer<T> consumer = (Consumer<T>) method;
			consumer.accept(param);
			return null;
		}
		return null;
	}

這就是jdk8帶來的高級抽象的概念,將加鎖的操作視爲對象,這就屏蔽了業務層面對於鎖的關注,完全只需要關注自己的實現即可,高度封裝。如果考慮更多的話,會考慮在doWithLock方法處throws 一個lockexception,是爲了拋出獲取鎖,加鎖,解鎖過程當中的異常,這樣會提供給業務人員更多的情況考慮。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章