[concurrency-interest] non-concurrent collection visibility question

Andriy Bukatar buka1974 at yahoo.com
Sat Jan 6 11:06:41 EST 2018


  Hi all,
 First of, Happy New Year everyone and all the best in 2018! Secondly, have a question that should be easy to answer for most of you here . In some class (say AggregateBuffer) that has a method dispatching multiple buffers, we have a collection that holds references to those ring buffers: final List<Buffer> buffers = new ArrayList<>(); //simple array list, non-concurrent collection  Then we have a method to add a new publisher (effectively a new buffer). The buffer gets created and gets added to the array list. We know that this method always gets called by the same bootstrap-thread that wires all the components.  Publisher<M> addPublisher(){       Buffer buffer = new Buffer();       buffers.add(ringBuffer);} And finally we have a dispatching thread that calls receive() method on the AggregateBuffer class scrolling over the buffer collection and dispatching each buffer one by one using some dispatching strategy (say attempt to read up to N messages at a time from each buffer)      int receive()    {        for (Buffer buf:buffers)//the line in question        {            buffer.read()        }    } The question is -     if we make sure that the dispatcher-thread gets created and gets passed the reference to the AggregateBuffer class AFTER all the calls to addPublisher() are done with, is it guaranteed that dispatcher-thread will see all the changes to the non-concurrent "buffers" collection and if so then what guarantees that? In other words – is it possible that a dispatcher-thread may see an empty “buffers” collection?    thank you
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cs.oswego.edu/pipermail/concurrency-interest/attachments/20180106/e3f1404d/attachment-0001.html>


More information about the Concurrency-interest mailing list