I don't think this achieves a correct distribution, as the index is kept on the strategy but could be used on different streams, right? Also, is this externally synchronized? If not, could end up in ArrayOutOfBoundsException, could it not?