A few things to consider:
1) You can use the same HashSet, but you will need to synchronize it (wrap calls to it using the synchronized block. But if all you do is look for things in the hash, multithreading will not buy you a lot.
2) If you want to split the HashSet, you can consider the section on key ranges. For example, if you are looking for a name, names starting with AF go into HashSet1, GL HashSet2, etc. Thus, your searches can be completely parallel.
source share