スレッドセーフな方法で、次のデータ構造の変更 (deactivate() 関数呼び出し) をサポートしようとしています -
private static Map<String, Set<Integer>> dbPartitionStatus = new HashMap<String, Set<DBPartitionId>>();
public void deactivate(DBPartitionId partition) throws Exception {
synchronized (dbPartitionStatus) {
Set<DBPartitionId> partitions = dbPartitionStatus.get(serviceName);
if (partitions == null) {
partitions = new HashSet<DBPartitionId>();
}
partitions.add(partition);
dbPartitionStatus.put(serviceName, partitions);
}
}
同期を ConcurrentHashMap と ConcurrentSkipListSet のデュオに置き換えると、競合状態が発生します。
ここで(java.util.concurrentを使用して)同期を実現するよりクリーンな方法があるかどうか疑問に思っていました