首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

在java中 怎么用Lock实现和synchronized(Object)的效果

2012-05-22 
在java中 如何用Lock实现和synchronized(Object)的效果private static ConcurrentHashMapString,String

在java中 如何用Lock实现和synchronized(Object)的效果
private static ConcurrentHashMap<String,String> data = new ConcurrentHashMap<String,String>();
private String value = null;
public String getContent(receivingParameters) {
lock.lock(); try {
//synchronized (data) {
value = data.get(receivingParameters);
if (value == null) {
data.put(receivingParameters,//随机数);
  return data.get(receivingParameters);
   
} else {
  return value;
}
//}
}finally {
lock.unlock();
}
}

如果同时有多个请求同时传递一个receivingParameters,采用Lock会有几次存入不同的随机数,不符合要求。采用synchronized(data)就只会走一次value==null的判断,返回的都是同一个随机数,符合要求。

[解决办法]

探讨

我是测的并发访问数,我有一个servlet,接收到参数后,new一个对象(每个请求都会new一个新的对象),调用这个对象的方法(这个对象的方法就是上述代码。然后把参数传给这个方法)。有的话直接从map里拿,没有的话,把参数作为key,随机数作为value存到map中,然后再返回这个value,用lock没有锁住,
看测试的结果好像是并发的请求同一个参数,拿到了不同的值,不知道我这样理解对不对。……

热点排行