Non tutte le implementazioni di java.util.List sono Thread safe quindi non sono tutte adatte ad essere usate in un ambiente multithread. Se si vuole usare una normale lista in un ambiente multithread ed evitare problemi di concorrenza si puó usare:
Collections.synchronizedList(ordinaryList);
questo metodo statico di Collections, a cui si passa una normale lista come può essere un ArrayList o una LinkedList, restituisce una lista adatta ad essere usata in un ambiente concorrente.