codice:
import java.io.BufferedReader;import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;




public class Server {


	public static void main(String args[]) {


		boolean chiave = false;
		Set<Utente> listaUtenti = new HashSet<Utente>();
		Set<String> listaRelazioni = new HashSet<String>();
		ArrayList<Messaggio> listaMessaggi = new ArrayList<Messaggio>();
		Set<Spam> listSpam = new HashSet<Spam>();


		Socket canale = null;


		ServerSocket server = null;
		ExecutorService executor = Executors.newFixedThreadPool(50);


		String c, risposta = null;


		try {
			server = new ServerSocket(49007);
			PrintWriter out;
			BufferedReader br;


			System.out.println("Server caricato");
			while (true) {


				StringBuffer requestLine = new StringBuffer();
				canale = server.accept();
				do {
					chiave = false;


					do {


						br = new BufferedReader(new InputStreamReader(
								canale.getInputStream()));


						out = new PrintWriter(canale.getOutputStream());
						c = br.readLine();


						if (c.equals("")) {


							chiave = true;


						} else {
							requestLine.append((String) c); 
							requestLine.append("\n");
						}
					} while (chiave == false);  //continua a chiedere fin quando non riceve una stringa vuota


					if (chiave == true) { //Se l'ultimo elemento inserito è uguale a una riga vuota il thrad esegue le istruzioni sulla richiesta inviata


						EchoThread echT = new EchoThread();
						echT.setSocket(canale);
						echT.setListaUtenti(listaUtenti);
						echT.setRichiesta(requestLine);
						echT.setListaRelazioni(listaRelazioni);
						echT.setListaUtenti(listaUtenti);
						echT.setListaMessaggi(listaMessaggi);
						echT.setListSpam(listSpam);
						executor.execute(echT);


						Thread.sleep(1500); //il Thread aspetta la risposta di EchoThread 
						out.print("Inserire altri comandi? (S=si)");
						out.flush();
						risposta = br.readLine();
						risposta = risposta.toUpperCase();
					}
					requestLine.delete(0, requestLine.length());


					
				} while (risposta.equals("S")); //controlla se si vuole aggiungere altre istruzioni
			}
		} catch (IOException e) {
			e.printStackTrace();


		} catch (InterruptedException e) {
			e.printStackTrace();
		}


	}


}

ho risolto in questo modo, secondo voi va bene? come potrei evitare di aggiungere l'istruzione Thread.sleep(1500); che mi sembra poco adeguata?