我试图做的是实现一个特定于密钥的读写锁。如果该密钥上没有写入请求,则可以同时执行多个读取请求。可以将不同键上的 Put 请求同时执行。我使用 ConcurrentHashMap 来保存密钥,并记录每个密钥的写入操作运行情况。
我的代码如下所示:
ConcurrentHashMap<String, AtomicInteger> count;
...
...
public void getLock(){
synchronized (count.get(key)) {
while (count.get(key).get() != 0) { // this means there are GET
requests running
try {
count.get(key).wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
这个想法是,当一个新线程想要读取时,它需要首先检查该密钥上是否有任何写入(如果计数不是0),如果没有,它可以继续,如果是,它需要等待。所以我想我必须使用.但是,Java迫使我使用该方法。count.get(key).wait();synchronized (count.get(key))wait()
我想知道在这里使用同步是否有意义,因为我已经使用了AtomicInteger?
p.s. 我确实有解锁方法的后期。notify()
慕标5832272
相关分类