0

並行環境でパフォーマンスが優れているHashSetに対するConcurrentHashSet?

//package com.google.code.yanf4j.util;

import java.io.Serializable;
import java.util.AbstractSet;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * A {@link ConcurrentHashMap}-backed {@link Set}.
 * 
 * @author The Apache MINA Project (dev@mina.apache.org)
 * @version $Rev: 597692 $, $Date: 2007-11-23 08:56:32 -0700 (Fri, 23 Nov 2007)
 *          $
 */
public class ConcurrentHashSet<E> extends MapBackedSet<E> {

  private static final long serialVersionUID = 8518578988740277828L;

  public ConcurrentHashSet() {
    super(new ConcurrentHashMap<E, Boolean>());
  }

  public ConcurrentHashSet(Collection<E> c) {
    super(new ConcurrentHashMap<E, Boolean>(), c);
  }

  @Override
  public boolean add(E o) {
    Boolean answer = ((ConcurrentMap<E, Boolean>) map).putIfAbsent(o,
        Boolean.TRUE);
    return answer == null;
  }
}
4

1 に答える 1

1

どのような環境HashSetでも、パフォーマンスは。よりも優れていConcurrentHashSetます。書き込みと読み取りが同時に発生し始めると、問題が発生します。

したがって、並行環境の場合、最適なのはですConcurrentHashSet

ただし、HashSet起動時にのみロードされる一部の構成を保存するためにを使用している場合など(最初の書き込み後にのみ読み取り操作が発生します)、問題ありません。私の意見では...

于 2012-12-28T02:39:05.873 に答える