Guarda ho dato solo uno sguardo veloce ma il tuo problema è semplice da risolvere. Puoi utilizzare un array di semafori quindi la classe Semaphore del package java.util.concurrent.
Tu già sai quanti thread crei quindi è ancora più facile. La tua variabile size contiene questo valore quindi ti basta creare
Codice:
Semaphore sem[] = new Semaphore[size];
aggiungi un campo Semaphore al tuo ClientHandler che verrà impostato dal costruttore.
dovresti fare una cosa del genere nel ciclo dove chiami ClientHandler
Codice:
for(int z = 1 ; z <= size ; z++)
{
System.out.println("Ricezione server " + z + " !");
port = in.read();
sem[z-1] = new Semaphore(0);
ClientHandler c = new ClientHandler(port , multiplying , result , size, sem[z-1]);
c.start();
}
for(Semaphore s:sem){
try{
s.acquire();
}catch(InterruptedException iee){
gestisci l'eccezione
}
}
mentre all'interno di ClientHandler, li dove dici che devi aspettare, inserisci, supponendo che sem sia un riferimento all'oggetto semaforo passato dal Client,
sem.release()
non so se sono stato chiaro ma a quest'ora posso essere perdonato