黑马程序员_java多线程多谢锁的使用
---------------------- android培训、java培训、期待与您交流! ----------------------
在学习黑马基础知识视频的时候,看到了下边一段程序对读写锁的使用:
在学习过程对于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;}}