guardando un po su google alla fine ho deciso di usare un hash table, che a quanto pare è syncronized e quindi dovrebbe gestirmi il fatto che se più thread accedono allo stesso valore dell'hashtable solo uno vi accede e gli altri si mettono in coda evitando quindi di leggere dati sporchi. è così vero?

l'hashtable che vorrei fare è qualcosa del tipo hashtable(String, ArrayList)

dovrebbe andare...