java 根据value进行并发同步操作
2015-07-23 16:19
661 查看
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.Semaphore; public abstract class ValueSynLock<T,K> { /** * @Fields signMap : TODO(存储一个同步信号量,key表示同步的值) */ private static ConcurrentMap<Object, Semaphore> signMap = new ConcurrentHashMap<Object, Semaphore>(); /** * 要执行的方法 * @throws Exception */ public abstract K run(); /** * 开始执行操作 * @param value * @throws Exception */ public K startWork(T value) throws Exception { Semaphore se = putMapAndGetSemaphore(value); K ret = null; try { se.acquire(); ret=run(); releaseLockMap(value); } catch (Exception e) { e.printStackTrace(); }finally{ se.release(); } return ret; } /** * 释放map * @param */ public void releaseLockMap(T a) { Semaphore se = signMap.get(a); if (se != null) { signMap.remove(a); } } /** * * @param 放入同步值,获取同步信号量 * @return */ public Semaphore putMapAndGetSemaphore(T value) { Semaphore se = signMap.get(value); if (se == null) { se = new Semaphore(1); signMap.put(value, se); } return signMap.get(value); } }
相关文章推荐
- NetSuite crm国内合作商来讲讲NetSuite常见问题
- String 与StringBuilder
- HDU 1242 Rescue(DFS or BFS)
- EF中使用SqlQuery进行参数化查询时抛出异常
- UIScrollView - 常用方法总结
- [SoapUI] SoapUI命令行方式运行
- Qt GUI 通过鼠标事件剖析整个事件处理流程(基于Qt4.5.2源码windows平台)
- UI—代理简单使用
- 下载:Win10 Build 10240 RTM官方简体中文镜像泄露(32/64位)
- 关于ueditor在Java中文件上传问题,404问题
- 关于ueditor在Java中文件上传问题,404问题
- [iOS学习]关于UILabel计算多行高度以及显示的问题
- CoreBluetooth之数据的读取与发送
- OS X 10.10 编译APUE Third Edition 源码
- web UI简介
- easyUI在IE浏览器中列表不显示
- UITabBarController的使用和坑
- 01-复杂度2. Maximum Subsequence Sum
- easyui 获取当前页签选中的名称
- druid报异常 “sql injection violation, part alway true condition not allow”的解决方案