Hi,
I think that you need reading as fast as possible and you write to the collection only a few of times.
I think that you could use a internall Object flags that have different values, by example, READING, WRITING, HAVEWRITED, HAVEREAD etc.
You could make a system that in reading mode enable the concurrent read of the collection, in writing make a queue of the rest, in havewriting ....
you only finish to start writing ...
Is most complex, but you could reading in most than 1 thread.