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(); }
     }
 }
相關文章
相關標籤/搜索