Saturday, 3 September 2016

java - What are the possible problems caused by adding elements to unsynchronized ArrayList's object by multiple threads simultaneously?

What are the possible problems caused by adding elements to unsynchronized ArrayList's object by multiple threads simultaneously?



Tried to run some experiments with a static ArrayList with multiple threads but couldn't find much.



Here i am expecting much of the side effects of not synchronizing an ArrayList or like Objects in a multithreaded environment.



Any good example showing side effects would be appreciable.
thanks.



below is my little experiment which ran smoothly without any exception.



I also wonder why it didn't throw any ConcurrentModificationException?



import java.util.ArrayList;
import java.util.List;

public class Experiment {
static List list = new ArrayList();
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println("A " + i);
new Thread(new Worker(list, "" + i)).start();
}
}
}

class Worker implements Runnable {
List al;
String name;

public Worker(List list, String name) {
this.al = list;
this.name = name;
}

@Override
public void run() {
while (true) {
int no = (int) (Math.random() * 10);
System.out.println("[thread " + name + "]Adding:" + no + "to Object id:" + System.identityHashCode(al));
al.add(no);
}
}
}

No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...