I haven't noticed this before, but I think you need to keep track of all the Futures you started and wait for them to finish before releasing the locks - otherwise you might have worker threads modifying buckets without holding the appropriate locks.