Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3336920
  • 博文数量: 1450
  • 博客积分: 11163
  • 博客等级: 上将
  • 技术积分: 11101
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-25 14:40
文章分类

全部博文(1450)

文章存档

2017年(5)

2014年(2)

2013年(3)

2012年(35)

2011年(39)

2010年(88)

2009年(395)

2008年(382)

2007年(241)

2006年(246)

2005年(14)

分类: Java

2008-12-25 17:54:44

第一步:生成一个全局WeakHashMap变量

private static WeakHashMap lockMap = new WeakHashMap(  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);
  }
 }

阅读(1126) | 评论(0) | 转发(0) |
0

上一篇: WeakHashMap

下一篇:WeakHashMap的应用

给主人留下些什么吧!~~