package ar.com.javacuriosities.threads; import java.util.ArrayList; import java.util.List; class Lesson05YieldMethod { public static void main(String[] args) { /* * Iniciamos la cantidad maxima de thread que se pueden * ejecutar en paralelo, mas dos adicionales para lograr que cuando * se haga el yield() existan hilos a los cuales ceder el contexto */ int availableProcessors = Runtime.getRuntime().availableProcessors() + 2; // Creando threads List<Thread> threads = new ArrayList<>(); for (int i = 0; i <= availableProcessors; i++) { Thread task = new Task(); task.setName("Task-" + i); threads.add(task); } // Start threads for (Thread thread : threads) { thread.start(); } } private static class Task extends Thread { @Override public void run() { System.out.println("Start: " + getName()); /* * El método estático yield() es un hint para informar que estamos * dispuesto a donar nuestro time slice para que otro thread se * ejecute. * Si descomentamos esta línea veremos que hay mas switch entre los thread */ // Thread.yield(); System.out.println("Finish: " + getName()); } } }