Buonasera.. espongo il mio problema..
Comincio con il riassumere il contesto: ho 2 pc, uno funge da client, un altro sia client e server (sono in esecuzione 2 programmi in contemporanea)..

Il client che si trova sulla stessa macchina del server, tramite l'applicazione, pubblica un file. L'altro client, dopo aver contattato il server, deve scaricare da quest'altro client il file, suddiviso in blocchi da 4 Kb (per farla breve.. emule o bitTorrent ^^)

Il programma, chiamiamolo, scaricatore (il client che deve fare il download), dichiara un pool di thread e ne fa partire uno per ciascun blocco di 4Kb che deve scaricare.. il problema è il seguente:

siccome, per ogni FILE, devo ripetere questa procedura ciclando ogni 10 secondi, devo assicurarmi che allo scadere di questo tempo tutti i thread avviati in precedenza abbiano terminato (correttamente, quindi con il blocco scaricato, oppure non correttamente, se c'è stato qualche problema..).. è necessario che tutti i thread abbiano cessato l'esecuzione, altrimenti nel secondo ciclo rischio di mandare in download per la seconda volta uno stesso blocco, perchè magari l'altro thread avviato in precedenza non ha ancora terminato.. come posso fare per assicurarmi che alla fine di ogni ciclo tutti i thread siano andati a letto?

Ho provato a smanettare un pò con i metodi shutDown() e awaitTermination (invocati sull'oggetto ExecutorService, ovvero il pool di thread), ma non credo funzionino correttamente, visto che ogni tanto viene generata una RejectedExecutionException

Qualcuno ha qualche idea?