Search code examples
javamultithreadingcollectionssynchronizedjava.util.concurrent

Synchronized List/Map in Java if only one thread is writing to it


The first thread is filling a collection continuously with objects. A second thread needs to iterate over these objects, but it will not change the collection.

Currently I use Collection.synchronized for making it thread-safe, but is there a fast way to doing it?

Update

It's simple: The first thread (ui) continuously writes the mouse position to the ArrayList, as long as the mousebutton is pressed down. The second thread (render) draws a line based on the list.


Solution

  • Even if you synchronize the list, it's not necessarily thread-safe while iterating over it, so make sure you synchronize on it:

    synchronized(synchronizedList) {
        for (Object o : synchronizedList) {
            doSomething()
        }
    }
    

    Edit:

    Here's a very clearly written article on the matter: http://java67.blogspot.com/2014/12/how-to-synchronize-arraylist-in-java.html