Do I have to synchronize on a List that is read by a stream?

Viewed 3974

if I have a Thread sensitive List I go usually like this while iterating over it:

    List list = Collections.synchronizedList(new ArrayList());
...
synchronized(list) {
    Iterator i = list.iterator(); // Must be in synchronized block
    while (i.hasNext())
        foo(i.next());   
}

I wonder if I use list.stream() and do then some operations over the stream like filter etc., if I also have to put the list into a synchronize block or does the stream makes a copy of the list?

Thanks

3 Answers
Related