在Java中锁定一个hashset

Jag*_*uar 1 java locking hashset

我的代码中有一个静态的HashSet对象引用,它必须禁止所有写入请求,直到给定的方法运行(它仅将hashset用于读取目的).我已阅读线程基础知识,但尚不清楚如何继续这样做.

有人可以帮帮我吗?

Jef*_*rey 9

您提到您已经阅读了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)


Chr*_*ung 6

您可以使用创建集的只读视图Collections.unmodifiableSet.只需将此视图传递给不需要写入集合的所有人.(UnsupportedOperationException对于试图修改此视图的任何人,都会抛出.)