Я пытаюсь создать поточно-структуру данных в Java, вдоль линий следующее:Синхронные вложенные коллекции в Java
public class A {
ConcurrentHashMap<String, Set<String>> subscriptions
private void addSubscription(String server, String client) {
Set<String> clients = subscriptions.get(server);
if (clients == null) {
clients = Collections.newSetFromMap(new ConcurrentHashMap<String, Boolean>());
subscriptions.put(server, agents);
}
clients.add(client);
}
private synchronized void removeSubscription(String server, String client) {
Set<String> clients = subscriptions.get(server);
if (clients != null) {
clients.remove(client);
if (clients.isEmpty()) {
subscriptions.remove(server, agents);
}
}
}
}
Тем не менее, кажется, что мне нужно добавить дополнительную синхронизацию (I «угадывая что-то, чтобы защитить доступ к наборам»). Есть ли более эффективная коллекция для использования здесь, или мне просто нужно добавить к ней соответствующую синхронизацию?
Коллекции Google Guava имеют метод 'Multimaps.synchronizedSetMultimap()'. Я никогда не пробовал, но, похоже, именно то, что вы хотите. –