package ar.com.javacuriosities.concurrency.single_thread_executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /* * Executors.newSingleThreadExecutor(): Crea un Pool de un solo Thread * que ira agarrando tareas de una cola y las ira ejecutando. */ public class Main { public static void main(String[] args) { // Creamos un pool single thread que va ejecutando las tareas desde una cola de tareas ExecutorService executor = Executors.newSingleThreadExecutor(); // Un único thread ejecutara estas 50 tareas for (int i = 0; i < 50; i++) { Runnable worker = new Task(10000000L + i); executor.execute(worker); } /* * Esto hará que el executor no acepte nuevas tareas y que finalice cuando el thread haya acabado con las 50 tareas */ executor.shutdown(); while (!executor.isTerminated()) { } System.out.println("Finish all the processes"); } /* * Task es una implementación de Runnable la cual recibe un parámetro y su * responsabilidad es contar desde el numero 1 hasta el valor asignado y * después informar el resultado en la consola. */ private static final class Task implements Runnable { private static int index; private final long countUntil; public Task(long countUntil) { this.countUntil = countUntil; } @Override public void run() { long total = 0; for (long i = 1; i < countUntil; i++) { total += i; } index++; System.out.println("Task number:" + index + " - Total: " + total); } } }