小编Sar*_*rah的帖子

ReentrantReadWriteLock - 一次很多读者,一次一个作家?

我对多线程环境有些新意,我正在尝试为以下情况提出最佳解决方案:

我每天早上从数据库中读取一次数据,并将数据存储在Singleton对象的HashMap中.我有一个setter方法,只有在发生日内DB更改时才会调用(每天会发生0-2次).

我还有一个getter,它在地图中返回一个元素,这个方法每天被调用数百次.

我担心在我清空和重新创建HashMap时调用getter的情况,因此试图在空/格式错误的列表中找到一个元素.如果我使这些方法同步,它会阻止两个读者同时访问getter,这可能是性能瓶颈.由于写入很少发生,我不想过多地受到性能影响.如果我使用ReentrantReadWriteLock,这会强制任何调用getter的队列,直到释放写锁定为止?是否允许多个读者同时访问getter?它一次只会强制执行一个作者吗?

编码这只是一个问题......

private final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
private final Lock read = readWriteLock.readLock();
private final Lock write = readWriteLock.writeLock();

public HashMap getter(String a) {
    read.lock();
    try {
        return myStuff_.get(a);            
    } finally {
        read.unlock();
    }
}

public void setter() 
{
    write.lock();
    try {
        myStuff_ = // my logic
     } finally {
          write.unlock();
    }
}
Run Code Online (Sandbox Code Playgroud)

java multithreading synchronized reentrantreadwritelock

10
推荐指数
1
解决办法
5486
查看次数

从java中的HashMap返回通配符匹配列表

我有一个Hashmap,可能在String中包含通配符(*).

例如,

HashMap<String, Student> students_;
Run Code Online (Sandbox Code Playgroud)

可以将约翰*作为一把钥匙.我想知道JohnSmith是否匹配student_中的任何元素.我的字符串可能有几个匹配(John*,Jo*Smith等).有什么方法可以从我的HashMap中获取这些匹配的列表吗?

是否有另一个我可以使用的对象,它不需要我遍历我的集合中的每个元素,或者我是否必须将它吸收并使用List对象?

仅供参考,我的收藏品中将包含少于200个元素,最终我希望找到与最少量通配符匹配的对.

java string wildcard hashmap

10
推荐指数
1
解决办法
8896
查看次数