il metodo random, se non ricordo male, in java ma anche in altri linguaggi, fornisce un numero di una sequenza di numeri pseudocasuale.
Di default come seme prende il numero di millisecondi corrente (o comunque qualcosa legato al numero di millisecondi). Quindi se due thread allo stesso istante richiamano il metodo random otterrano lo stesso numero. Ma se lo stesso thread richiama due volte il metodo random() allora ottiene due numeri dversi, facenti parte di questa sequenza di numeri pseudocasuale.
Io avevo risolto un problema analogo facendo così: mi ero creato una classe con nu metodo statico che mi restituiva il numero random. In tal modo i vari thread richiamavano sempre il metodo dello stesso oggetto, per cui ero sicuro di ottenere due numeri distinti della sequenza pseudocasuale.