1 -A logica da thread no caso da conta foi que, o mesmo objeto estava tentando acessar o método, então tinha que controlar a entrada.
no caso do exemplo usando array , eram 3 objetos adicionando no mesmo array , então logo eu tinha que syncronizar o array.
a logica das thread são... eu sincronizar o que ele tem em comum, o que ambos estão querendo fazer ao mesmo tempo ?
2- ficou meio confuso a parte do array , eu crio um array no main , mando ele para 3 objetos diferentes e depois chamo ele já com as mensagem adicionadas, eu fiz outros teste para entender , mas é que fica estranho rssr
3 - eu vi tb que o método lista.contains(null ), eu não preciso fazer um for para percorrer ele, ta certo ? caso eu querira saber se tem algum null na lista.