Java并发编程基础(五)

2019-08-26  本文已影响0人  smallmartial

1.读写锁

  1. 读写锁在同一个时刻可以拥有多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过读锁和写锁,事得并发性比一般的排它锁有了很大提升。

  2. java并发包提供的读写锁实现是ReentranWriteLock(特性):

    • 公平性选则
    • 重入性
    • 锁降级

2.多写锁示例

ReadWriteLock仅定义了获取锁和写锁的两个方法,即readLock()和writeLock方法。

package cn.smallmartial.concurrency;

import jdk.nashorn.internal.ir.CallNode;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

/**
 * @Author smallmartial
 * @Date 2019/8/26
 * @Email smallmarital@qq.com
 */
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 values){
        w.lock();
        try {
            return map.put(key,values);
        } finally {
            w.unlock();
        }
    }
    
    //清空所有的内容
    public static final void clear(){
        w.lock();
        try {
            map.clear();
        }finally {
            w.unlock();
        }
    }
}

3.读写锁的实现

上一篇 下一篇

猜你喜欢

热点阅读