Quais são os possíveis problemas causados pela adição de elementos ao objeto de ArrayList não sincronizados por vários threads simultaneamente?

Quais são os possíveis problemas causados pela adição de elementos a dados não sincronizados?ArrayListobjeto por vários threads simultaneamente?

Tentei executar algumas experiências com um ArrayList estático com vários threads, mas não consegui encontrar muita coisa.

Aqui estou esperando muitos dos efeitos colaterais de não sincronizar um ArrayList ou objetos como em um ambiente multithread.

Qualquer bom exemplo mostrando efeitos colaterais seria apreciável. obrigado.

abaixo está o meu pequeno experimento, que decorreu sem problemas, sem exceção.

Também me pergunto por que não jogou nenhumConcurrentModificationException?

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

public class Experiment {
     static List<Integer> list = new ArrayList<Integer>();
    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<Integer> al;
    String name;

    public Worker(List<Integer> 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);
        }
    }
}

questionAnswers(4)

yourAnswerToTheQuestion