zoukankan      html  css  js  c++  java
  • 多线程之ReentrantReadWriteLock

    java5以后在java.util.concurrent包下,有很多的并发类,可以让我们摆脱java5时,笨重的写法来满足多线程,而且提供了更加丰富的使用场景能力

    其中,在locks包下,提供了

    ReentrantReadWriteLock和ReentrantLock来帮助 我们来完成读写锁的能力

    WriteLock可以降级为ReadLock,顺序是:先获得WriteLock再获得ReadLock,然后释放WriteLock,这时候线程将保持Readlock的持有。反过来ReadLock想要升级为WriteLock则不可能

    public class Cache {
      static Map<String, Object> map = new HashMap<String, Object>();
      static ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
      static Lock r = rwl.readLock();
      static Lock w = rwl.writeLock();
      // 获取一个key对应的value
      public static final Object get(String key) {
        r.lock();
        try {
          return map.get(key);
        } finally {
          r.unlock();
        }
      }
      // 设置key对应的value,并返回旧有的value
      public static final Object put(String key, Object value) {
        w.lock();
        try {
          return map.put(key, value);
        } finally {
          w.unlock();
        }
      }
      // 清空所有的内容
      public static final void clear() {
        w.lock();
        try {
          map.clear();
        } finally {
          w.unlock();
        }
      }
    }

    参考:

    http://my.oschina.net/adan1/blog/158107

    http://www.cnblogs.com/liuling/p/2013-8-21-03.html

    http://www.codeceo.com/article/java-rd-lock.html#0-tsina-1-4678-397232819ff9a47a7b7e80a40613cfe1

  • 相关阅读:
    centos7安装kde桌面
    centos7安装NVIDIA驱动
    15日报
    11日报
    14日报
    奖励加分
    课程建议
    13日报
    12日报
    每日总结1213
  • 原文地址:https://www.cnblogs.com/draem0507/p/5440388.html
Copyright © 2011-2022 走看看