a) Looks like HK2Populator.populate has to be synchronized. It adds one or more populator passed as argument which means if two or more threads call this method simultaneously, they are going to see effect of each others' populators.
b) Also, I didn't really understand why it is removing all populators at the end of the method:
Should it not only remove the populators it had added in the beginning of the method?
c) Overall, I think PopulatorPostProcessor needs to be thoroughly thought through. We should not allow custom populators to be discovered, because their discovery depends on the order in which modules containing custom populators are installed in the system.