java - 如何在不锁定 `get()` 方法的情况下制作线程安全的 HashMap?

标签 java multithreading

我面试的时候问了一个问题:如何实现getter和setter独占写入HashMap和非独占读取。假设如下代码:

public class MyClass {

     private HashMap map = new HashMap();


      // HOW TO implement Getter and Setter for exclusive writing and non-exclusive reading
}

最佳答案

试试这个

class MyClass<K, V> {
    private HashMap<K, V> map = new HashMap<K, V>();
    private ReadWriteLock rwl = new ReentrantReadWriteLock();
    private Lock rl = rwl.readLock();
    private Lock wl = rwl.writeLock();

    public V get(Object k) {
        rl.lock();
        try {
            return map.get(k);
        } finally {
            rl.unlock();
        }
    }

    public V put(K k, V v) {
        wl.lock();
        try {
            return map.put(k, v);
        } finally {
            wl.unlock();
        }
    }
}

关于java - 如何在不锁定 `get()` 方法的情况下制作线程安全的 HashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15729367/

相关文章:

java - 在 Java 中测试服务器是否启动的正确方法?

java - 如何使用最简单、最少的数据结构来实现 LFU 缓存?

java - 如何在 java 中验证 JSON 对象?

java - 将 3x3 二维数组插入 9x9 二维数组

java - 使用Hibernate的Spring/Gradle项目发出关于无法连接数据库的警告(对我的伙伴错误)

c++ - 使函数线程安全与否?

c++ - 如何根据用户请求安全地停止正在运行的线程?

c# - 多线程程序——设计注意事项

c - 线程和并行编程

c# - 异步 HttpHandler 的请求是否可以无异常地中断?