Jag*_*uar 1 java locking hashset
我的代码中有一个静态的HashSet对象引用,它必须禁止所有写入请求,直到给定的方法运行(它仅将hashset用于读取目的).我已阅读线程基础知识,但尚不清楚如何继续这样做.
有人可以帮帮我吗?
您提到您已经阅读了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();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用创建集的只读视图Collections.unmodifiableSet
.只需将此视图传递给不需要写入集合的所有人.(UnsupportedOperationException
对于试图修改此视图的任何人,都会抛出.)