VademécumVademécum\Ejecutor [Executor] (concepto)Ejecutor [Executor] (concepto)\Ejemplo

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                                                

 

principio