ReentrantReadWriteLock学习

ReentrantReadWriteLock是Lock的另外一种实现方式,咱们知道ReentrantLock是一个排他锁,同一时间只容许一个线程访问,而ReentrantReadWriteLock容许多个读线程同时访问,但不容许写线程和读线程、写线程和写线程同时访问。相对于排他锁,提升了并发性。在实际应用中,大部分状况下对共享数据(如缓存)的访问都是读操做远多于写操做,这时ReentrantReadWriteLock可以提供比排他锁更好的并发性和吞吐量。缓存

class RWDictionary {
     private final Map<String, Data> m = new TreeMap<String, Data>();
      private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
      private final Lock r = rwl.readLock();    //读锁
      private final Lock w = rwl.writeLock();    //写锁
  
      public Data get(String key) {
          r.lock();
          try { return m.get(key); }
         finally { r.unlock(); }
     }
     public String[] allKeys() {
         r.lock();
         try { return m.keySet().toArray(); }
         finally { r.unlock(); }
     }
     public Data put(String key, Data value) {
         w.lock();
         try { return m.put(key, value); }
         finally { w.unlock(); }
     }
     public void clear() {
         w.lock();
         try { m.clear(); }
         finally { w.unlock(); }
     }
 }
相关文章
相关标签/搜索