work hard work smart

专注于Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Java中的读写锁 ReentrantReadWriteLock

Posted on 2020-04-13 17:31  work hard work smart  阅读(170)  评论(0编辑  收藏  举报

使用场景较少

/**
 * 使用场景较少
 */
@Slf4j
public class LockExample3 {

    private final Map<String, Data> map = new TreeMap<>();

    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();


    private final  Lock readLock = lock.readLock();

    private final  Lock writeLock = lock.writeLock();

    public Data get(String key){
        readLock.lock();
        try{
            return  map.get(key);
        }finally {
            readLock.unlock();
        }
    }

    public Set<String> getAllKeys(){
        readLock.lock();
        try{
            return  map.keySet();
        }finally {
            readLock.unlock();
        }
    }

    public Data put(String key, Data value){
        //没有读写操作,才能获得写锁。 不适合写少,读多的情况,将导致饥饿情况,一直无法获得写锁。
        writeLock.lock();
        try{
            return  map.put(key, value);
        }finally {
            readLock.unlock();
        }

    }


    class Data{

    }

    public static void main(String[] args) throws InterruptedException {


    }

    private  static  void add(){

    }
}