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

黑马软件工程师_java多线程谢谢锁的使用

2012-12-20 
黑马程序员_java多线程多谢锁的使用---------------------- android培训、java培训、期待与您交流! --------

黑马程序员_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;}}



在getData方法中存在两处对value变量的判断,咋一看之下和jdk开发文档上很相近考虑很周密,但是当看到value是getData方法的局部变量的时候,感觉实例存在小小的问题,value没有起到数据共享的作用,因此第二处的value==null判断没有必要,在看开发文档中对于读写锁部分实例中判断条件局势全局变量,所以能够达到数据共享的效果,如果一个线程得到写锁,处理完数据另外的数据得到写锁可能处理同样的数据,所以需要进行判断;

---------------------- android培训、java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

热点排行