PCJ: Proyecto  Certifícate  en Java Sesión 9 Threads Enrique Zamudio López @chochosmx ezamudio
Threads Hilos de ejecución dentro de un mismo proceso
Pueden correr de manera simultánea
Cualquier programa Java tiene al menos 1 Thread
Clase  java.lang.Thread
java.lang.Thread Implementa  java.lang.Runnable
Tiene distintos estados runnable running new dead Waiting / blocked / sleeping
Clase java.lang.Thread Métodos start()
interrupt()
join()
Clase java.lang.Thread Métodos estáticos currentThread()
sleep()
yield()
Métodos adicionales Implementados en java.lang.Object wait()
notify()
notifyAll()
Definir un Thread Extender la clase  java.lang.Thread public class Suboptima extends Thread { public void run() { //Hacer el trabajo } } Se sobreescribe  run()  pero se debe invocar a  start()
Extender Thread t = new Suboptima(); t. start() ; System.out.println( “ Calculando PI”); public void run() { //Calcular PI }
Instanciar un Thread t = new Suboptima(); t. run() ; System.out.println( “ Calculando PI”); Si se invoca  run() , se ejecuta en el mismo Thread, no se crea uno nuevo.
Definir un Thread Implementar Runnable public class Optima extends ChuckNorris implements Runnable { public void run() { //Hacer algo } } Podemos extender otras clases
Instanciar con Runnable o = new Optima(); t = new Thread(o); t. start() ; System.out.println( “ Calculando PI”); Menos confuso al ver el uso directo de Thread
Estados de un Thread Runnable Running New Dead Waiting / blocked / sleeping
Ejemplo 1 10 hilos corriendo tareas simultáneamente
Uso de  yield()
Prioridades en Threads
Métodos sleep() y join() Método  sleep()  es estático
Método  join()  es para esperar otro thread
Ambos arrojan  InterruptedException
Método interrupt() Causa que métodos que declaran  InterruptedException  la puedan arrojar
Es responsabilidad del programador verificar si el thread ha sido interrumpido
Si no se hace nada, el Thread puede continuar su ejecución
Ejemplos 2 y 3 Ejemplo de  join()
Ejemplo de  sleep()
Bonus track:  Ejemplos de cómo manejar interrupciones
Garantías Garantías de la JVM Thread.sleep()  tiempo mínimo No se garantiza: Orden en que corren
Que terminen su ejecución
Respeto a prioridades (alta vs baja)
Que  yield()  ceda el CPU

PCJ Sesión 9: Threads