读写锁技术

功能:实现数据可以同时被多个线程读取,数据的读与读之间实现互斥,数据的读写之间互斥。


1、定义一个缓冲区,用于将从数据库读得的数据存入其中。


private Map<String,Object> cache = new HashMap<String,Object>();

2、定义一个读写锁

private ReadWriteLock rwl = new ReentrantReadWriteLock();


3、定义读取数据的方法getData(),代码如下:

public synchronized 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 {
       value = &quot;select xx from xxx&quot;;
       /*从数据库里面去读取数据*/
    }  finally {
        rwl.writeLock().unlock();
       }
    }
  } finally {
     rwl.readLock().unlock();
     /*将读锁释放*/
    }
   return value;
}




你可能感兴趣的:(读写锁)