由于性能原因,我不想使用synchronized,我需要来自Guava的2个multimaps。 假设我们有一个适用于这两个地图的课程:
directionsDisplay.setDirections(response);
以上两种方法互不阻挡。
我的问题是:如何在以下方法中正确同步其中一个集合?我的锁是条纹,这意味着它内部有一组较小的哈希锁。我可以锁定整套钥匙只是为了阅读吗?还有其他选择吗?
private final Multimap<String, String> rolesByUsers = HashMultimap.create();
private final Multimap<String, String> usersByRoles = HashMultimap.create();
public Collection<String> getAllUsersByRole(String role) {
Lock lock = stripedLock.get(role).readLock();
try {
lock.lock();
return usersByRoles.get(role);
} finally {
lock.unlock();
}
}
public Collection<String> getAllRolesByUser(String userId) {
Lock lock = stripedLock.get(userId).readLock();
try {
lock.lock();
return rolesByUsers.get(userId);
} finally {
lock.unlock();
}
}