If you can't read please download the document
Upload
enrique-zamudio-lopez
View
3.285
Download
1
Embed Size (px)
DESCRIPTION
Slides de la sesión 9 del curso PCJ (Proyecto Certifícate en Java), tema: Threads
Citation preview
2. Threads
3. Pueden correr de manera simultnea 4. Cualquier programa Java tiene al menos 1 Thread 5. Clasejava.lang.Thread 6. java.lang.Thread
7. Tiene distintos estados runnable running new dead Waiting / blocked / sleeping 8. Clase java.lang.Thread
9. interrupt() 10. join() 11. Clase java.lang.Thread
12. sleep() 13. yield() 14. Mtodos adicionales
15. notify() 16. notifyAll() 17. Definir un Thread
public class Suboptima extends Thread { public void run() { //Hacer el trabajo } } Se sobreescriberun()pero se debe invocar astart() 18. Extender Thread t = new Suboptima(); t. start() ; System.out.println( Calculando PI); public void run() { //Calcular PI } 19. Instanciar un Thread t = new Suboptima(); t. run() ; System.out.println( Calculando PI); Si se invocarun() , se ejecuta en el mismo Thread, no se crea uno nuevo. 20. Definir un Thread
public class Optima extends ChuckNorris implements Runnable { public void run() { //Hacer algo } } Podemos extender otras clases 21. 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 22. Estados de un Thread Runnable Running New Dead Waiting / blocked / sleeping 23. Ejemplo 1
24. Uso deyield() 25. Prioridades en Threads 26. Mtodos sleep() y join()
27. Mtodojoin()es para esperar otro thread 28. Ambos arrojanInterruptedException 29. Mtodo interrupt()
30. Es responsabilidad del programador verificar si el thread ha sido interrumpido 31. Si no se hace nada, el Thread puede continuar su ejecucin 32. Ejemplos 2 y 3
33. Ejemplo desleep() 34. Bonus track:Ejemplos de cmo manejar interrupciones 35. Garantas
No se garantiza:
36. Que terminen su ejecucin 37. Respeto a prioridades (alta vs baja) 38. Queyield()ceda el CPU 39. Quasi-garanta Un Thread corriendo por lo general no tendr una prioridad inferior a un Thread en estadorunnable . Generalmente, si un Thread de baja prioridad est corriendo cuando un Thread de alta prioridad se vuelverunnable , la JVM pasar el Thread de baja prioridad arunnablepara correr el Thread de alta prioridad. 40. Sincronizacin y Candados
Resolucin
41. Mtodos estticos 42. Bloques de cdigo Palabra reservadasynchronized 43. Mtodos public class Ejemplo { publicstatic synchronizedvoid stat1() { } publicstatic synchronizedvoid stat2() { } publicsynchronizedvoid metodo1() { } publicsynchronizedvoid metodo2() { } } 44. synchronized publicsynchronizedvoid metodo() { //codigo } public void metodo() { synchronized( this ) { //codigo } } 45. Sincronizacin public class DrHouse { private Leg badLeg; private Leg goodLeg; private Hand[] hands; publicsynchronizedpatear(Object algo) { goodLeg.kick(algo); } publicsynchronizedgolpear(Object algo) { hands[1].hit(algo); hands[0].hit(algo); } } 46. Sincronizacin public patear(Object algo) { synchronized ( goodLeg ) { goodLeg.kick(algo); } } public synchronized golpear(Object algo) { synchronized ( hands[1] ) { hands[1].hit(algo); } synchronized ( hands[0] ) { hands[0].hit(algo); } } 47. Ejemplo 4
48. Deteccin de interrupciones 49. Efecto deyield()con sincronizacin 50. Deadlocks
51. Hilo 1 espera recurso bloqueado por hilo 2... que est esperando recurso bloqueado por hilo 1. 52. Puede darse de manera ms compleja pero casi siempre ser circular. 53. FIX: Siempre bloquear recursos en el mismo orden. 54. Ejemplo 5
55. Cmo arreglarlo 56. Cena de filsofos 57. Bonus track:ScheduledExecutor 58. Interaccin entre Threads
59. Conwait()un Thread puede esperar un aviso de disponibilidad de un recurso 60. Connotify()se avisa a otro Thread (slo a uno) que puede continuar 61. ConnotifyAll()se avisa a todos los Threads que esperan sobre el objeto 62. Importante!
63. Ejemplo 6
64. Excepciones cuando se usa mal 65. ? 66. Bonus Tracks
67. java.util.concurrent
68. Thread Pools 69. Colas, arreglos, mapas concurrentes 70. Thread Pools
71. Un Thread puede ejecutar varias tareas 72. Es casi como reutilizar threads 73. Las tareas se ponen en una cola y los Threads las van tomando de ahi para ejecutarlas 74. Estructura de un Thread Pool Thread 1 Thread 2 Thread 3 Threadn r6 r1 r4 r5 r3 r2 r9 r7 r8 Aplicaciones agregan tareas a la cola... ...Threads toman la primera tarea disponible, o esperan si no hay tareas que ejecutar. Cola de tareas (Runnables) 75. Executors
76. Fixed Se pueden crear ThreadPools directamente
77. Aceptan cualquier Runnable 78. Ejemplo
79. Thread Pool de tamao fijo 80. Thread Pool de tamao variable 81. Piped Streams
82. Lectura delPipedInputStreambloquea hasta que se escriba alPipedOutputStream 83. Es otra forma de comunicacin entre dos distintos hilos de ejecucin 84. Similar await()ynotify()(pero no hay equivalente denotifyAll() ) 85. Ejemplo
86. Productor usa PipedOutputStream 87. Consumidor usa PipedInputStream 88. BlockingQueue
89. Uno o varios hilos pueden agregar objetos a la cola 90. Uno o varios hilos pueden tomar objetos
El mtodotake()bloquea hasta obtener un objeto