package threadPoolConTerminazione;
 
 
public class ProvaThreadPool {
 
	public static void main(String[] args) {
 
		final int N = 8;
		final int T = 4; 
 
		Repository<Integer> tasks = new Repository<Integer>();
		Repository<Integer> results = new Repository<Integer>();
		FunzioneSemplice funz = new FunzioneSemplice();
		ComputerThread[] ct = new ComputerThread[T];
 
		Generatore generatore = new Generatore(N,tasks);
		Stampatore<Integer> stampatore = new Stampatore<Integer>(results);
		generatore.start();
		stampatore.start();
 
		System.out.println("Creazione dei thread nel pool ");
		for(int i=0; i<T; i++) {
			ct[i] = new ComputerThread<Integer,Integer>(tasks, results, funz);
			ct[i].start();
		}
		System.out.println("Attesa terminazione thread del pool ...");
		for(int i=0; i<T; i++) {
			try {
				ct[i].join();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		System.out.println("Tutti i thread del pool sono terminati\nTerminazione Stampatore ...");
		stampatore.interrupt();
		System.out.println("Terminazione main");
		return;		
	}
 
}