No ConcurrentHashSet? No Problem
The JDK provides several concurrent Set classes, each with their own application, but it does not provide a ConcurrentHashSet. Using the Collections utility class, however, such a structure may be created.
If you have ever looked at the source of java.util.HashSet, you will have noticed that it is a simple wrapper around java.util.HashMap. A similar strategy is used by the JDK to create, at runtime, a Set from a backing Map:
final Set<E> concurrentSet =
Collections.newSetFromMap(new ConcurrentHashMap<E, Boolean>(...));
The actual contract is defined in the javadocs. Using this method allows you to create, effectively, a ConcurrentHashSet without having to resort to a synchronized set.