ExecutorService: Eseguire Thread a gruppi di N
DOMANDA:
Come posso schedulare i Thread affinché siano eseguiti a gruppi di N?
RISPOSTA:
Esiste un oggetto della classe java.util.Concurrent chiamato ExecutorService che risolve il problema in poche righe di codice. Vediamo un esempio in cui vogliamo svolgere dieci operazioni (ciascuna della durata di mezzo secondo) eseguendole a gruppi di 2.
Classe Operazione:
package executorservice;
public class Operazione implements Runnable {
private long id;
public Operazione(long id) {
this.id = id;
}
@Override
public void run() {
System.out.print(id + " ");
try {
Thread.sleep(500); // mezzo secondo di pausa
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Operazione implements Runnable {
private long id;
public Operazione(long id) {
this.id = id;
}
@Override
public void run() {
System.out.print(id + " ");
try {
Thread.sleep(500); // mezzo secondo di pausa
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
La classe di Test:
package executorservice;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestConcurrent {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(2); // gruppi di due
System.out.print("Id: ");
for(int i = 0; i < 10; i++) { // eseguo 10 volte l'operazione
Thread thread = new Thread( new Operazione(i), "Operazione "+i );
executor.execute(thread);
}
executor.shutdown();
while (!executor.isTerminated()) { }
}
}
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestConcurrent {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(2); // gruppi di due
System.out.print("Id: ");
for(int i = 0; i < 10; i++) { // eseguo 10 volte l'operazione
Thread thread = new Thread( new Operazione(i), "Operazione "+i );
executor.execute(thread);
}
executor.shutdown();
while (!executor.isTerminated()) { }
}
}
L'argomento di Executors.newFixedThreadPool(2) assicura che i Thread siano processati a gruppi di 2.
Commenti
Posta un commento