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

  • 相关阅读:
    synergy一个鼠标键盘控制多台电脑
    matlab 画图参考小程序
    基于centos7的真实机环境下安装 vmware workstastion
    mapreduce运行原理及YARN
    mybatis_resultMap(2)
    (第6天)mybatis_resultMap(1)
    mybatis动态SQL--传入参数为集合,数组类型
    mybatis动态SQL--Trim --Where
    mybatis动态SQL--if--choose
    (第5天)mybatis接口方法入参类型
  • 原文地址:https://www.cnblogs.com/draem0507/p/5440388.html
Copyright © 2011-2022 走看看