Look into existing Java Collections classes as replacement for BlockingIteratorImpl

Looks like java.util.concurrent.BlockingQueue<Descriptor> might be a good replacement for our custom BlockingIteratorImpl<Descriptor>. Or if the interface doesn't exactly match our needs (thinking of end-of-stream elements), maybe we can use that class internally rather than building our own blocking queue. This means less code and fewer bugs. This could resolve #21365 (moved).