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