Ciao a tutti! Nel mio programma devo fare una serie di conti ripetitivi e vorrei farli parallelamente utilizzando un FixedThreadPool, vorrei intanto chiedervi se il mio codice è giusto

codice:
Classes.Hydrostatic.Hydrostatic[] Results = new Classes.Hydrostatic.Hydrostatic[size];
Semaphore S = new Semaphore(1);
        ExecutorService ES = Executors.newFixedThreadPool(5);
        for (int i = 0; i < size; i++) {
            SHC[i] = new StraightHulls();  // implements Runnable
            SHC[i].setResultArray(Results, i, S);
            ES.submit(SHC[i]);
        }
        ES.shutdown();
        ES.awaitTermination(1, TimeUnit.DAYS);
        System.out.println("--------------------------------- TUTTI HANNO FINITO?");
io ho dei dubbi sull'uso corretto dei comandi
codice:
ES.shutdown();
ES.awaitTermination(1, TimeUnit.DAYS);
che dovrebbero far andare avanti il programma (interfaccia) quando tutti i conti sono stati fatti....
poi volevo sapere se avete qualche consiglio su quanti processi in esecuzione parallela devo fare ovvero su che numero mettere in
codice:
Executors.newFixedThreadPool(5);