Originariamente inviato da bmw
Dici che static non va bene perchè creo comunque un solo ArrayList e non ha senso che sia statico ??
Se tieni quel campo static, va bene solo se crei 1 oggetto Lista. Se ne crei 2 o più ... quel campo static, essendo in comune, lo sovrascrivi!

Originariamente inviato da bmw
Ho modificato così il run() del thread ma non cambia l'esecuzione...
Infatti non cambia. Perché mettendo il synchronized sul run(), si cerca di acquisire il lock sull'oggetto sui cui è invocato il run() ... che è il Thread01 o a seconda, Thread02.

In sostanza il thread 1 cerca di acquisire il lock sulla istanza di Thread01 e il thread 2 cerca di acquisire il lock sulla istanza di Thread02. Sono due oggetti diversi, quindi non c'è contendimento tra i due thread!