Board logo

标题: Java细粒度锁实现的3种方式(1) 分段锁 [打印本页]

作者: look_w    时间: 2018-12-15 13:37     标题: Java细粒度锁实现的3种方式(1) 分段锁

1. 分段锁借鉴concurrentHashMap的分段思想,先生成一定数量的锁,具体使用的时候再根据key来返回对应的lock。这是几个实现里最简单,性能最高,也是最终被采用的锁策略,代码如下:
[url=][/url]
/** * 分段锁,系统提供一定数量的原始锁,根据传入对象的哈希值获取对应的锁并加锁 * 注意:要锁的对象的哈希值如果发生改变,有可能导致锁无法成功释放!!! */public class SegmentLock<T> {    private Integer segments = 16;//默认分段数量    private final HashMap<Integer, ReentrantLock> lockMap = new HashMap<>();    public SegmentLock() {        init(null, false);    }    public SegmentLock(Integer counts, boolean fair) {        init(counts, fair);    }    private void init(Integer counts, boolean fair) {        if (counts != null) {            segments = counts;        }        for (int i = 0; i < segments; i++) {            lockMap.put(i, new ReentrantLock(fair));        }    }    public void lock(T key) {        ReentrantLock lock = lockMap.get(key.hashCode() % segments);        lock.lock();    }    public void unlock(T key) {        ReentrantLock lock = lockMap.get(key.hashCode() % segments);        lock.unlock();    }}




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0