现在的位置: 首页 > 综合 > 正文

线程学习之读写锁模拟缓存系统

2018年02月05日 ⁄ 综合 ⁄ 共 682字 ⁄ 字号 评论关闭

不多说,上代码微笑

package com.lyj;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class CacheSystemDemo {
    private static Map<String, Object> map = new HashMap<String, Object>();
    private static ReadWriteLock rwl = new ReentrantReadWriteLock();

    public static void main(String[] args) {
        getData("h");
    }

    public static Object getData(String key) {
        rwl.readLock().lock();
        Object value = null;
        try {
            value = map.get(key);
            if (value == null) {
                rwl.readLock().unlock();
                rwl.writeLock().lock();
                try {
                    //防止后面线程再次写数据
                    if (value == null) {
                        value = "hello";
                    }
                } finally {
                    rwl.writeLock().unlock();
                }
                rwl.readLock().lock();
            }
        } finally {
            rwl.readLock().unlock();
        }

        return value;
    }
}

抱歉!评论已关闭.