lpr-b:maintpconcurr
Questa è una vecchia versione del documento!
<java code> package threadPoolConcurrency;
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
ExecutorService tpe = null; // creazione dell'esecutore tpe = // new ThreadPoolExecutor(T,MAX_T,10000L,TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); Executors.newFixedThreadPool(T);
// creazione del repository per i risultati Repository<Integer> results = new Repository<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
}
System.out.println("Shutdown ...");
tpe.shutdown(); // equivalente alla dichiarazione di fine stream del generatore
System.out.println("Attesa terminazione ...");
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;
}
} </code>
lpr-b/maintpconcurr.1193063724.txt.gz · Ultima modifica: 22/10/2007 alle 14:35 (18 anni fa) da Marco Danelutto
