我要做的是实现一个特定于密钥的读写锁。如果该键上没有写入请求,则可以同时执行多个读取请求。可以同时执行对不同键的请求。我使用 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),如果没有,它可以继续,如果是,它需要等待。所以我想我必须使用count.get(key).wait();
. 但是,Java 强迫我synchronized (count.get(key))
使用该wait()
方法。
我想知道在这里使用同步是否有意义,因为我已经使用了 AtomicInteger?
ps 我确实有notify()
后来的解锁方法。