Q:

Is it possible for ArrayList to fail in a single-writer-multi-reader system?

I have a List that needs to called by multiple threads. There will be only a single writer, and this writer will add elements and do nothing else. Elements are never removed or modified. Many concurrent reader threads will call list.size() and list.get(index). 
We must assume that on occasion the internal array will need to grow as elements are added.
Can I get away with using a plain ArrayList, or do I need to implement some fancy concurrent structure to avoid exceptions?

A:

If your readers all need to be reading the same state of the List, meaning that the writer can't write between all readers reading, then yes, you'll need to use ReadWriteLock or some more complex method of handling this case.
If you're not spared for memory usage, don't mind if your readers always have the most current data available, and your only goal is just to avoid exceptions, consider a CopyOnWriteArrayList, which is built to avoid exceptions on write/iteration conflicts. When you write to this List, it makes a new one as the finished result but the readers currently using the List continue reading the "old" (pre-write) one instead.

