Java中的读写锁 ReentrantReadWriteLock

匆匆过客 提交于 2020-04-14 16:15:13

【推荐阅读】微服务还能火多久?>>>

使用场景较少

/**
 * 使用场景较少
 */
@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(){

    }
}

  

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!