我的代码中有一个对象引用的静态 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/