lpr-b-2007-2008: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-2007-2008/maintpconcurdue.txt · Ultima modifica: 19/09/2008 alle 14:08 (17 anni fa) da 127.0.0.1