`
lionlx
  • 浏览: 282969 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

WeakHashMap的并发应用

阅读更多
第一步:生成一个全局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;
	}
分享到:
评论

相关推荐

    java集合-WeakHashMap的使用

    WeakHashMap是Java中的一种特殊的哈希表实现,它使用弱引用(Weak Reference)来保存键对象。当键对象没有被其他强引用引用时,在垃圾回收时会自动从WeakHashMap中移除对应的键值对。

    WeakHashMap的使用方法详解

    主要介绍了WeakHashMap的使用方法详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下

    解析WeakHashMap与HashMap的区别详解

    本篇文章是对WeakHashMap与HashMap的区别进行了详细的分析介绍,需要的朋友参考下

    Java编程WeakHashMap实例解析

    主要介绍了Java编程WeakHashMap实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

    Java弱引用与WeakHashMap

    书中还提到可以用WeakHashMap来作为缓存的容器可以有效解决这一问题。之前也确实遇到过类似问题,但是没有接触过“弱引用”相关的问题,于是查阅了一些资料。  《Java 理论与实践: 用弱引用堵住内存泄漏》一文也...

    Java优化编程(第2版)

    15.1 用weakhashmap屏蔽内存泄漏 15.2 优化java应用大小 15.3 通过randomaccess接口优化迭代列表 15.4 合并java中的多进程与系统优化 小结 附录a together工具的使用简介 附录b j2se 5.0的新特性与性能的提升 附录c ...

    线程死锁CPU过高,请求原因分析

    线程死锁 CPU过高 WeakHashMap 请求原因分析

    javabitset源码-JerrySoundCode:杰瑞声码

    WeakHashMap (done) 并发集合 ArrayBlockingQueue(done) LinkedBlockingDeque (done) LinkedBlockingQueue (done) PriorityBlockingQueue (done) ConcurrentHashMap (done) ConcurrentLinkedQueue (done) C

    Java 基础核心总结 +经典算法大全.rar

    Hashtable 类IdentityHashMap 类WeakHashMap 类 Collections 类集合实现类特征图 泛形 泛型的使用 用泛型表示类 用泛型表示接口泛型方法 泛型通配符 反射 Class 类Field 类Method 类ClassLoader 类 枚举 枚举特性 ...

    Java期末复习-类集框架

    SortedMap接口、HashMap类、Hashtable类、Properties类、Map.Entry接口、WeakHashMap类、IndentityHashMap类 集合输出: Iterator、ListIterator、foreach、废除的Enumeration Collections工具类 Comparable接口、...

    picketlink-jbas-common-2.6.0.CR4.zip

    Java-WeakIdentityHashMap.zip,weakhashmap identityhashmapa独立库的组合,用于weakidantityhashmap实现内/外字段

    各种集合的总结

    总结了集合中常用的一点点,希望可以共享 List:LinkedList,ArrayList,Vector(Stack),Set Map:Hashtable,HashMap,WeakHashMap

    Java集合类操作优化经验总结

    本文首先针对 Java 集合接口进行了一些介绍,并对这些接口的实现类进行详细描述,包括 LinkedList、ArrayList、Vector、Stack、Hashtable、HashMap、WeakHashMap 等,然后对一些实现类的实现方式和使用经验进行讲解...

    清华妹子的Java仓库(进阶学习路线)

    本仓库记录了我的Java学习进阶之路,涵盖了Java基础、JDK源码、JVM中的重要知识,附有代码和博客讲解,旨在提供一个Java在线共享学习平台,帮助更多的...Java集合框架源码解读(4)——WeakHashMap Java集合框架源码解读

    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类

    超全Java集合框架讲解.md

    - WeakHashMap - Hashtable - Collection 集合体系详解 - Set 接口 - AbstractSet 抽象类 - SortedSet 接口 - HashSet - LinkedHashSet - TreeSet - List 接口 - AbstractList 和 AbstractSequentialList...

    WeakObjectPool:用于在对象生命周期中将对象附加到对象(即装饰器)的池

    这里有几个关键的区别,它们有效地定义了WeakObjectPool: WeakHashMap具有弱键而不是值,例如WeakObjectPool。 它是一个池而不是一个地图,否则也称为多地图。 WeakObjectPool允许您在对象(装饰器)的生命周期...

    javalruleetcode-dsal:数据结构与算法个人整理

    java lru leetcode 基础算法 快速排序: 随机枢纽元快排、三路快排、三数中值快排 归并排序: 自顶向下归并、自底向上...WeakHashMap Leetcode 刷题记录 栈实现队列、队列实现栈、猫狗队列、带有最小值的栈、LRU、数据

    疯狂JAVA讲义

    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 查找,替换...

    Thinking in Java 4th Edition

    What’s Inside Preface 1 Java SE5 and SE6 .................. 2 Java SE6 ............................................The 4th edition...........................Changes ...........................................

Global site tag (gtag.js) - Google Analytics