Potrebbe essere invece che è perché i due thread magari lo stanno facendo contemporaneamente?
I due thread operano concorrentemente sullo stesso oggetto ArrayList? ArrayList non è thread-safe, quindi senza aver previsto una sincronizzazione "a monte", sarebbe già solo questo inappropriato.