Innanzitutto salve a tutti, questo è il mio primo messaggio, spero di riuscire a trovare qualche consiglio.

Spiego il problema:

Ho realizzato una chat in codice java ovviamente con piu thread che vanno a lavorare su dei dati comuni, quali una lista di utenti che viene aggiornata eliminando e aggiungendo elementi o semplicemente ritornando la lista.


codice:
public class Sync{ 	
LinkedList<Utente> listaUtenti;    	
public Sync(LinkedList<Utente> lu) { 		
    listaUtenti=lu; 	
} //costruttore   	

//UTENTI  	

public LinkedList<Utente> getLista(){ 		
return listaUtenti; 	
}  	
public void EliminaUtente(Utente u){ 		
listaUtenti.remove(u); 	
} 	
public void AggiungiUtente(Utente u){ 		
listaUtenti.add(u); 	
} 	
public Utente getUtente(int i){ 		
return listaUtenti.get(i); 	
}
Mi chiedevo se bastesse usare synchronized e come poterlo usare, o se usare semafori.

Se uso synchronized per ogni classe credo non vada bene perchè da come ho capito se un utente impegna il metodo per aggiungere o eliminare un utente, comunque puo essere usato il metodo per leggere gli utenti e questo creerebbe inconsistenza.
Quindi ho pensato, se fosse possibile, render tutta la classe synchronized, ma questo rallenterebbe un pochetto l'accesso.

Ringrazio in anticipo per l'aiuto!