Lanzamos 10 threads, pero limitamos a 4 el número de threads que ejecutan en paralelo:
class Repeater |
public class Repeater
extends Thread { private String id; private int count; public Repeater(String id, int count) { this.id = id; this.count = count; } public void run() { do { System.out.println(id + ": start: " +
count); count--; try { Thread.sleep(1000); // 1000ms = 1s } catch (InterruptedException ignore) { } } while (count > 0); System.out.println(id + ": end"); } } |
class Repeaters |
import
java.util.concurrent.ExecutorService; import
java.util.concurrent.Executors; public class Repeaters { private static final int NUMBER_THREADS = 10; private static final int POOL_SIZE = 4; public static void main(String[] args) { ExecutorService pool = Executors.newFixedThreadPool(POOL_SIZE); for (int i = 0; i < NUMBER_THREADS; i++) { String id = String.valueOf((char) ('A' + i)); int count = (int) (Math.random() * 5); Runnable repeater = new Repeater(id, count); pool.execute(repeater); } System.out.println("Repeaters ..."); } } |
> java Repeaters |
A: start: 0 B: start: 3 C: start: 0 D: start: 3 Repeaters ... A: end B: start: 2 E: start: 4 C: end F: start: 0 D: start: 2 B: start: 1 F: end G: start: 2 E: start: 3 D: start: 1 B: end H: start: 4 D: end I: start: 0 E: start: 2 G: start: 1 H: start: 3 I: end J: start: 1 G: end E: start: 1 H: start: 2 J: end E: end H: start: 1 H: end |
Temas relacionados
Ejecutor [Executor] (concepto)