Strumenti Utente

Strumenti Sito


lpr-b:maintpconcurdue
package threadPoolConcurrencyDue;
 
import java.util.concurrent.*;
 
 
public class ProvaThreadPool {
 
	public static void main(String[] args) {
 
		final int N = 16;		// numero dei task da calcolare
		final int T = 4;		// numero minimo di thread nel pool 
		final int MAX_T = 8;    // numero massimo di thread nel pool 
 
		ThreadPoolExecutor tpe = null; 		// creazione dell'esecutore
		tpe = new ThreadPoolExecutor(T,MAX_T,10000L,TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
 
		// creazione del repository per i risultati
		LinkedBlockingQueue<Integer> results = new LinkedBlockingQueue<Integer>();
		// creazione del thread stampatore
		Stampatore<Integer> stampatore = new Stampatore<Integer>(results);
		stampatore.start();
		// funzione da calcolare
		Compute<Integer,Integer> fun = new FunzioneSemplice();
 
		// questo sostituisce il codice del generatore:    
		for(int i=0; i<N; i++) {                 // per ogni task,
			Task t = new Task(i,fun,results);	 // crea un nuovo Task Runnable
			tpe.execute(t);						 // e lo passa al ThreadPoolExceutor
			try {Thread.sleep(10); } catch(InterruptedException e) {e.printStackTrace();}  // attende un po' prima di generarne un altro
		}
		tpe.shutdown();		// equivalente alla dichiarazione di fine stream del generatore 
		try {
			tpe.awaitTermination(50000L, TimeUnit.MILLISECONDS);   // attesa della terminazione
		} catch (InterruptedException e) {
			System.out.println("ThreadPoolExecutor non ha terminato l'esecuzione: scatta timeout");
		}
		System.out.println("Tutti i thread del pool sono terminati\nTerminazione Stampatore ...");
		stampatore.interrupt();	// come prima
		System.out.println("Terminazione main");
		// fine lavori ...
		return;		
	}
 
}
lpr-b/maintpconcurdue.txt · Ultima modifica: 22/10/2007 alle 14:41 (12 anni fa) da Marco Danelutto