This is problematic, because the usual approach (PVS search) is to do the supposed best move first, obtain an accurate score, and then narrow the search window so that subsequent moves are only tested to see if they improve the current best score or not. That narrow-window search is typically much faster than a search with wider bounds.Since parallelizing alpha-beta looks very difficult and way above my skill level, I decided to take the "easy" route and just have a thread pool handle the search for all the moves at the root.
Re concurrency: all you have to do to make it work is to make your hash table access method "synchronized", although as others have noted performance may be an issue because you will acquire/release locks frequently.
--Jon