---------------------- [url=http://edu.csdn.net/heima]android培训[/url]、[url=http://edu.csdn.net/heima]java培训[/url]、期待与您交流! ----------------------
在学习黑马基础知识视频的时候,看到了下边一段程序对读写锁的使用:
在学习过程对于getData中的value判断很是纠结,value是一个局部变量 ,一个线程操作不影响另外的线程内容,为什么要判断第二次value==null呢,之后比较下边代码和jdk开发文档中的实例发现,如果数据共享需要第二次判断,否则不需要
下边是视频中的实例代码
在getData方法中存在两处对value变量的判断,咋一看之下和jdk开发文档上很相近考虑很周密,但是当看到value是getData方法的局部变量的时候,感觉实例存在小小的问题,value没有起到数据共享的作用,因此第二处的value==null判断没有必要,在看开发文档中对于读写锁部分实例中判断条件局势全局变量,所以能够达到数据共享的效果,如果一个线程得到写锁,处理完数据另外的数据得到写锁可能处理同样的数据,所以需要进行判断;
---------------------- [url=http://edu.csdn.net/heima]android培训[/url]、[url=http://edu.csdn.net/heima]java培训[/url]、期待与您交流! ----------------------
详细请查看:[url]http://edu.csdn.net/heima[/url]
在学习黑马基础知识视频的时候,看到了下边一段程序对读写锁的使用:
在学习过程对于getData中的value判断很是纠结,value是一个局部变量 ,一个线程操作不影响另外的线程内容,为什么要判断第二次value==null呢,之后比较下边代码和jdk开发文档中的实例发现,如果数据共享需要第二次判断,否则不需要
下边是视频中的实例代码
package cn.itcast.heima2;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class CacheDemo {
private Map<String, Object> cache = new HashMap<String, Object>();
public static void main(String[] args) {
// TODO Auto-generated method stub
}
private ReadWriteLock rwl = new ReentrantReadWriteLock();
public Object getData(String key){
rwl.readLock().lock();
Object value = null;//局部变量
try{
value = cache.get(key);
if(value == null){//第一次判断
rwl.readLock().unlock();
rwl.writeLock().lock();
try{//不同线程执行到次需要重新读取map中的数据进行判断,而不是使用原来的vlaue直接进行判断
if(value==null){//二次判断
value = "aaaa";//实际失去queryDB();
}
}finally{
rwl.writeLock().unlock();
}
rwl.readLock().lock();
}
}finally{
rwl.readLock().unlock();
}
return value;
}
}
在getData方法中存在两处对value变量的判断,咋一看之下和jdk开发文档上很相近考虑很周密,但是当看到value是getData方法的局部变量的时候,感觉实例存在小小的问题,value没有起到数据共享的作用,因此第二处的value==null判断没有必要,在看开发文档中对于读写锁部分实例中判断条件局势全局变量,所以能够达到数据共享的效果,如果一个线程得到写锁,处理完数据另外的数据得到写锁可能处理同样的数据,所以需要进行判断;
---------------------- [url=http://edu.csdn.net/heima]android培训[/url]、[url=http://edu.csdn.net/heima]java培训[/url]、期待与您交流! ----------------------
详细请查看:[url]http://edu.csdn.net/heima[/url]