Feature/efficient compose

With the lock you don't need a ConcurrentMap. There is also a bug here, that will occur when multiple threads try to add the same product. You will end up overwriting the the index of p on each of the thread unlocking.