第一步:生成一个全局WeakHashMap变量
private static WeakHashMap<String, Object> lockMap = new WeakHashMap<String, Object>(50);
第二步:从MAP中取对象。如果有就取出,如果没有就新建放到MAP中
/**
* 得到同步锁,用完丢弃即可
*
* @param key
* @return
*/
protected static Object getSynLockObject(String key) {
synchronized (lockMap) {
Object o = lockMap.get(key);
if (o == null) {
o = new Object();
lockMap.put(key, o);
}
return o;
}
}
第三步:锁住不同的对象,这样可以对同一对象进行同步。不同对象可以并发
public boolean processPaymentResult(YeepayResult result) {
long orderSeqId = result.getOrderSeqId();
// 只要这个Key不丢,同步锁就能起作用,所以要显式的引用这个key值
String synLockKey = String.valueOf(orderSeqId);
Object synLock = PayCenter.getSynLockObject(synLockKey);
/**
* 对同一个订单的操作需要进行同步,防止出错
*/
synchronized (synLock) {
return synchroProcessPaymentResult(result);
}
}
例:并发情况下,对数据进行加1操作,插入数据库
private Map<String, String> lockMap = new WeakHashMap<String,String>(); //confirm every thread get lock object is the same object
private String lockPrefix = this.getClass().getName()+"incrementSequenceNum";
private int incrementSequenceNum(String sID, String tID, TopicIndexItem cacheTopic){
String syn = lockPrefix + sID+tID;
String value = lockMap.get(syn);
if(value == null){
synchronized(lockPrefix){
if(lockMap.get(syn)==null){
lockMap.put(syn, syn);
}
}
value = lockMap.get(syn);
}
//syn = syn.intern();
int sequenceNum = 0;
synchronized(value){
sequenceNum = DB.getTopicSequenceNum(sID, tID)+1;
DB.incrementTopicSequenceNum(sID, tID);
if(cacheTopic!=null){
cacheTopic.setMaxSequenceNum(sequenceNum);
}
}
return sequenceNum;
}
分享到:
相关推荐
WeakHashMap是Java中的一种特殊的哈希表实现,它使用弱引用(Weak Reference)来保存键对象。当键对象没有被其他强引用引用时,在垃圾回收时会自动从WeakHashMap中移除对应的键值对。
主要介绍了WeakHashMap的使用方法详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
本篇文章是对WeakHashMap与HashMap的区别进行了详细的分析介绍,需要的朋友参考下
主要介绍了Java编程WeakHashMap实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
书中还提到可以用WeakHashMap来作为缓存的容器可以有效解决这一问题。之前也确实遇到过类似问题,但是没有接触过“弱引用”相关的问题,于是查阅了一些资料。 《Java 理论与实践: 用弱引用堵住内存泄漏》一文也...
15.1 用weakhashmap屏蔽内存泄漏 15.2 优化java应用大小 15.3 通过randomaccess接口优化迭代列表 15.4 合并java中的多进程与系统优化 小结 附录a together工具的使用简介 附录b j2se 5.0的新特性与性能的提升 附录c ...
线程死锁 CPU过高 WeakHashMap 请求原因分析
WeakHashMap (done) 并发集合 ArrayBlockingQueue(done) LinkedBlockingDeque (done) LinkedBlockingQueue (done) PriorityBlockingQueue (done) ConcurrentHashMap (done) ConcurrentLinkedQueue (done) C
Hashtable 类IdentityHashMap 类WeakHashMap 类 Collections 类集合实现类特征图 泛形 泛型的使用 用泛型表示类 用泛型表示接口泛型方法 泛型通配符 反射 Class 类Field 类Method 类ClassLoader 类 枚举 枚举特性 ...
SortedMap接口、HashMap类、Hashtable类、Properties类、Map.Entry接口、WeakHashMap类、IndentityHashMap类 集合输出: Iterator、ListIterator、foreach、废除的Enumeration Collections工具类 Comparable接口、...
Java-WeakIdentityHashMap.zip,weakhashmap identityhashmapa独立库的组合,用于weakidantityhashmap实现内/外字段
总结了集合中常用的一点点,希望可以共享 List:LinkedList,ArrayList,Vector(Stack),Set Map:Hashtable,HashMap,WeakHashMap
本文首先针对 Java 集合接口进行了一些介绍,并对这些接口的实现类进行详细描述,包括 LinkedList、ArrayList、Vector、Stack、Hashtable、HashMap、WeakHashMap 等,然后对一些实现类的实现方式和使用经验进行讲解...
本仓库记录了我的Java学习进阶之路,涵盖了Java基础、JDK源码、JVM中的重要知识,附有代码和博客讲解,旨在提供一个Java在线共享学习平台,帮助更多的...Java集合框架源码解读(4)——WeakHashMap Java集合框架源码解读
java集合框架 3.6. LinkedHashSet类 4. Map接口 4.1. Map.Entry接口 4.2. SortedMap接口 4.3. AbstractMap抽象类 4.4. HashMap类和TreeMap类 4.4.1. HashMap类 ...4.6. WeakHashMap类 4.6. IdentityHashMap类
- WeakHashMap - Hashtable - Collection 集合体系详解 - Set 接口 - AbstractSet 抽象类 - SortedSet 接口 - HashSet - LinkedHashSet - TreeSet - List 接口 - AbstractList 和 AbstractSequentialList...
这里有几个关键的区别,它们有效地定义了WeakObjectPool: WeakHashMap具有弱键而不是值,例如WeakObjectPool。 它是一个池而不是一个地图,否则也称为多地图。 WeakObjectPool允许您在对象(装饰器)的生命周期...
java lru leetcode 基础算法 快速排序: 随机枢纽元快排、三路快排、三数中值快排 归并排序: 自顶向下归并、自底向上...WeakHashMap Leetcode 刷题记录 栈实现队列、队列实现栈、猫狗队列、带有最小值的栈、LRU、数据
7.6.3 WeakHashMap实现类 279 7.6.4 IdentityHashMap实现类 280 7.6.5 EnumMap实现类 281 7.7 HashSet和HashMap的性能选项 282 7.8 操作集合的工具类:Collections 283 7.8.1 排序操作 283 7.8.2 查找,替换...
What’s Inside Preface 1 Java SE5 and SE6 .................. 2 Java SE6 ............................................The 4th edition...........................Changes ...........................................