Во-первых, возможно, что ответ содержится в самом вопросе. У Spring есть высокоуровневые абстракции исключающие во многих случаях нужду в явной работе с потоками - события и асинхронные методы. Во-вторых, как уже написал
Никита есть множество способов синхронизации потоков, чтобы дать правильный ответ, надо знать ваш алгоритм. Может быть, вам нужен CyclicBarrier, а может эффективнее будет HashMap заменить на BlockingQueue ¯\_(ツ)_/¯