java - 在 Java 中锁定哈希集

标签 java locking hashset

我的代码中有一个对象引用的静态 HashSet,它必须禁止所有写入请求,直到给定方法运行(该方法仅将哈希集用于读取目的)。我已阅读 Thread 基础知识,但尚不清楚如何继续执行此操作。

谁能帮帮我?

最佳答案

您提到您已经阅读了 Thread 基础知识,所以我假设您有一个多线程应用程序,其中有多个读取器和/或写入器。您可以使用读写锁来限制对集合的访问。当给定的方法执行时,它锁定读锁,这允许其他人读,但不能写。只要您使用下面的 putInSet 方法(或类似方法)进行写入,您就可以要求写入锁来写入。然后在持有读锁时无法写入该集合。

private final Set<Object> mySet = new HashSet<Object>();
private final ReadWriteLock lock = new ReentrantReadWriteLock();
public void methodThatRunsAndAllowsReadOnly() {
    lock.readLock().lock();
    try {
        // method body here
    }
    finally {
       lock.readLock().unlock();
    }
}

public void putInSet(Object o) {
    lock.writeLock().lock();
    try {
        mySet.add(o);
    }
    finally {
       lock.writeLock().unlock();
    }
 }

关于java - 在 Java 中锁定哈希集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3908472/

相关文章:

multithreading - 并发调用 `Wait()`的 `sync.Cond`方法,安全吗?

Java 哈希集和树集

java - 专门为每个名字分配一个ID

java - 未记录的 Java 正则表达式字符类 :\p{C}

c++ - 如何使用双重检查锁来初始化 shared_ptr

windows - 克服 "It is being used by another person or program."

java - 什么是具有独特元素(如集合)和获取元素功能的正确Java集合

java - 使用自己的 HashSet.add() 实现

java - 哪个版本更好?

java - 使用模拟框架模拟 Web 服务,而不使用 junit