SlideShare ist ein Scribd-Unternehmen logo
1 von 30
8. Threads (hilos)
             ¿Qué es un thread?
             Funcionamiento básico
             Clase java.lang.Thread
             Mecanismos de manipulación de threads
             Ciclo de vida de un thread
             Métodos sincronizados



Programación III                Tema 8 - Threads
¿Qué es un thread?
   • Programación Tradicional
           – Un procesador → Un flujo de control
           – Flujo de Control = Flujo de Ejecución = Hilo de Ejecución
   • Programación multihilo (multithread)
           – Permite la ocurrencia simultánea de varios flujos de control
                   • Aun cuando siga existiendo un solo procesador
           – Cada uno de ellos puede programarse independientemente
                   • O no. Puede compartir parte o todo el código con otros
           – Pueden realizar un trabajo distinto, idéntico o complementario
   • Un Thread es un hilo de ejecución que...
           – se ejecuta en paralelo e “independiente” de otros hilos
           – puede trabajar sobre datos propios o datos compartidos,
           – puede en un momento dado pararse, reiniciarse, sincronizarse o
             esperar a otros hilos.



Programación III                                  Tema 8 - Threads
Un hilo NO ES un código

   • Sino quien ejecuta secuencialmente ese código
            Hilo                      Hilo    Hilo            Hilo
          principa                  thread1 thread2          swing
              l
    main (...) {                         run() {
       ...                                  ...
       obj.m1();                            o.m1();
       ...                                  ...
    }                                    }
                                                        mouseClicked() {
                                                           ...
                                                           test.m1();
                       m1 (...) {                          ...
                          ...                           }
                          ...
                       }


Programación III                     Tema 8 - Threads
Un hilo NO ES su(s)
                   recurso(s)
   • (recursos, datos, objetos...)
                                      hilo 1


    hazTortilla() {                               hilo 2
       ...
       miC =
         new Cocina();
       miC.cogeHuevos();
       miC.cogeSarten();
       miC.ponFuego();
       ...
    }

  hilo == persona ("ejecuta")
  programa == acciones ("receta")
  datos == objetos ("ingredientes")
Programación III               Tema 8 - Threads
Pero ojo con los recursos
                 compartidos...
   • Posible lío!!! (luego lo vemos)
                                                              hilo 1
                                                                       hilo 2

                   hazTortilla() {
                      ...
                      miC =
                        laUnicaCocina();
                      miC.cogeHuevos();
                      miC.cogeSarten();
                      miC.ponFuego();
                      ...
                   }




Programación III                           Tema 8 - Threads
Funcionamiento básico
                   (1/2)
   • Además entonces del hilo principal y del hilo
     de swing...
           – podemos crear otros hilos independientes
           – que se ejecutan en paralelo al código de los
             demás hilos.
   • Pero... ¿qué código ejecutan los threads?
           – Los threads ejecutan el código que se encuentra
             dentro algún método run()...
                   • bien del propio thread,
                   • bien de otro objeto.

Programación III                         Tema 8 - Threads
Funcionamiento básico
                               (2/2)
   • Método run() del propio Thread
           – Todo thread posee un método run() que por defecto es
             el código que se ejecuta cuando se pone en marcha el
             Thread
                   • Este método por defecto se encuentra vacío  sobreescribir
   • Método run() de otros objetos
           – El método run() no es exclusivo de los threads
           – Otros objetos pueden implementar este método
                   • Interfaz Runnable
           – Así, un thread también puede ejecutar (como un hilo de
             ejecución independiente) el método run() de otros
             objetos

Programación III                            Tema 8 - Threads
Clase java.lang.Thread
                      (1/3)
   • En Java, para trabajar con Threads se utiliza
     la clase Thread, del paquete java.lang.
   • Constructores:
           – Thread( )
                   • Crea un thread con nombre "Thread-"+n
           – Thread( String name )
                   • Crea un thread con el nombre indicado como
                     parámetro.
           – Thread( Runnable target )
                   • Crea un thread asociado al objeto destino.
           – Combinaciones
           – Uso de grupos de threads
Programación III                         Tema 8 - Threads
Clase java.lang.Thread
                                (2/3)
   • Algunos métodos:
      – static Thread currentThread()
          • Devuelve el thread en curso
      – String getName()
      – void setName(String name)
      – int getPriority()
      – void setPriority(int newPriority)
                   • Asigna prioridades relativas
           – ThreadGroup getThreadGroup()
           – void run()




Programación III                              Tema 8 - Threads
Clase java.lang.Thread
                     (3/3)
   • Creación y Puesta en marcha de Threads:
           – Los Threads, como todo en Java, son objetos
           – Java necesita saber que se “lanza” un nuevo hilo
                   Para eso se ejecuta el método start()
           – Por ejemplo:
                      Thread miThread = new Thread();
                      MiThread.start();
           – Así, tenemos un thread que no hace nada,
             cuando se invoca el método start() no se ejecuta
             ningún código porque por defecto el método
             run() de un thread está vacío.

Programación III                         Tema 8 - Threads
Creando threads (1/4)

   • Existen dos mecanismos para trabajar con
     Threads:
           – Heredar de la clase Thread
           – Implementar el interface Runnable
   • 1. Heredando de la clase Thread
           – Se hereda de la clase Thread y se sobrescribe el
             método run()


                                         Ejemplo: ThreadHeredando.java


Programación III                 Tema 8 - Threads
Creando threads (2/4)

   • Salida obtenida:
         Final del main


         1111111111111111111111111111111222222222222
         2222222222222222222222122111111112211222111
         1111111111111111111111111222222222222222222
         2211122222222222211111111111111111111111111
         1222222222222222222222222222

   • ¿Por qué el desorden? Cada salida puede diferir
           – Una vez lanzados, no sabemos cuál será el tiempo de
             ejecución de los hilos
   • ¿Cuántos hilos de ejecución existen en este ejemplo?  3
           – El hilo de ejecución del thread t1
           – El hilo de ejecución del thread t2
           – El hilo de ejecución del main
Programación III                          Tema 8 - Threads
Creando threads (3/4)

   • 2. Implementando el interfaz Runnable
           – El interface Runnable (java.lang.Runnable) sólo tiene un
             método:
                           public interface Runnable
                           {
                                 void run();
                           }
           – Procedimiento:
                   • Crear una clase que implemente el interface Runnable
                   • Crear un objeto de esa clase
                   • Vincular ese objeto a un thread
           – Resultado:
                   • Al poner en marcha el thread, éste ejecutará el código que el
                     objeto posea en su método run()


Programación III                             Tema 8 - Threads
Creando threads (4/4)

   • Por ejemplo:

           Class MiRunnable implements Runnable {
             void run() {
                   // haz algo
             }
             public static void main( String[] args )
             {
                   Runnable objeto = new MiRunnable();
                   Thread hilo = new Thread( objeto );
                   hilo.start();
             }

   • hilo.start() -> objeto.run()
Programación III             Tema 8 - Threads
Esperando a que un hilo acabe
                                (1)
   • Otro ejemplo (HiloEjemploRunnable.java):
           class HiloEjemplo implements Runnable {
             static long horaInicio = System.currentTimeMillis();
             int cont = 0;
             int num;
             HiloEjemplo( int numObjeto ) {
               num = numObjeto;
             }
             public void run() {
               while( System.currentTimeMillis()-horaInicio < 3000) {
                      System.out.print( num );
                      cont++;
               }
             }
             public void visualizar() {
               System.out.println( "Objeto num. " + num +
                                   " - " + cont + " veces." );
           } }

Programación III                     Tema 8 - Threads
Esperando a que un hilo acabe
                                (2)
   • Posible main():
           Thread[] t = new Thread [4];
           HiloEjemplo[] o = new HiloEjemplo[4];
           for (int i = 0; i < 4; i++) {
             o[i] = new HiloEjemplo(i);
             t[i] = new Thread(o[i], "Objeto-" + i);
             System.out.println( "nuevo Thread() " +
                    (t[i]==null?"fallo":"correcto")+" - "+t[i].getName()   );
           }
           for (int i = 0; i < 4; i++) t[i].start();
           try {
             for (int i = 0; i < 4; i++) t[i].join();
           } catch (InterruptedException e) { }
           for (int i = 0; i < 4; i++) o[i].visualizar();
   • El hilo que hace el join espera a que el hilo de ese objeto
     finalice

Programación III                         Tema 8 - Threads
Esperando a que un hilo acabe
                      (3)
 • Salida obtenida:
       nuevo   Thread()   correcto   -   Objeto-0
       nuevo   Thread()   correcto   -   Objeto-1
       nuevo   Thread()   correcto   -   Objeto-2
       nuevo   Thread()   correcto   -   Objeto-3


       0000000000000000000000000000000000000000011111111
       1120312033333333312000000000031111111111203120311
       1111111203111111111111122222222222000002333111111
       1
       (…)

                 2331111111112301233301230111111111111111122222333
                 3012222222222223000000111111111111111111111222222
                 222222222222222223000000000031203
                 Objeto num. 0 - 297 veces.
                 Objeto num. 1 - 341 veces.
                 Objeto num. 2 - 213 veces.
Programación III Objeto num. 3 - 302 veces.
                                     Tema 8 - Threads
Ciclo de vida de un thread
                                (1)


                                                     Bloqueado
                                                     Esperando
                                                     Esperando-tiempo




   • getState()  Thread.State
           –       NEW
           –       RUNNABLE
           –       BLOCKED, WAITING, TIMED_WAITING
           –       TERMINATED
Programación III                  Tema 8 - Threads
Ciclo de vida de un thread
                     (2)
   • Estado TIMED_WAITING:
           – Método sleep()
                   • Método de clase (static) que permite dejar dormido
                     (not runnable ) al thread en curso durante un
                     determinado tiempo
                      – En este estado el thread no consume recursos  no es
                        candidato a ser elegido por el dispatcher para su ejecución
                   ...
                   Thread.sleep(1000);
                   ...
                   • El thread que estaba ejecutando ese código (thread en
                     curso) se duerme durante 1 segundo  el código no
                     continua ejecutándose hasta al menos 1 segundo
                   • La temporización no es exacta!
Programación III                            Tema 8 - Threads
Interrupción de hilos
   • sleep puede lanzar InterruptedException
   • Eso ocurre si algún otro hilo le interrumpe:
           – Método Thread.interrupt() en el objeto a ser
             interrumpido
           – Fuera del sleep, la interrupción debe ser gestionada por
             el programador en el run():
                   public void run() {
                     while(System.currentTimeMillis()-horaInicio<3000) {
                         System.out.print( num );
                         cont++;
                         if (Thread.interrupted()) break;
                     }
                   }

Programación III                          Tema 8 - Threads
Sincronización de hilos (1)

   • Programar en varios hilos tiene muchas
     ventajas pero algunos peligros
           – ¿Y si varios acceden al mismo dato?
           – ¿Y si varios ejecutan el mismo método?
                   • (EjemploProblemasSincronizacion.java)
   • ¿Cómo solucionamos estos problemas?
         esp[183452].fecundaOvulo(ov)                      yo.veAlBaño(unicoBaño)




Programación III                        Tema 8 - Threads
Sincronización de hilos (2)
   • Modificador synchronized
   • Puede aplicarse sobre:
           – Un método de instancia
                   • En cada momento sólo habrá un hilo ejecutando un
                     método sincronizado sobre cada objeto
           – Un método de clase
                   • En cada momento sólo puede haber un thread
                     ejecutando un método sincronizado sobre la clase o
                     cualquier objeto de la clase
           – Un objeto tal cual - synchronized(obj)
   • Bloquea a los que no pueden "entrar"
                   • (EjemploProblemasSincronizacion2.java)
Programación III                        Tema 8 - Threads
Sincronización de hilos (3)

   • Entonces ¿mejor sincronizamos todos los
     métodos?
           – No. Es menos eficiente (tiempo de ejecución)
           – Y puede dar lugar a interbloqueos (un gran
             peligro de la programación multihilo)
                   • (EjemploProblemasInterbloqueos.java)
   • Sincronicemos con prudencia
           – Evitando interbloqueos




Programación III                       Tema 8 - Threads
Sincronización de hilos (4)

   • Estado WAITING:
           – Método objeto.wait()
                   • Causa que el thread en curso se quede esperando
                      – Ligado a un objeto
                   • Hasta que otro thread “libere”
                      – A ese mismo objeto
                   • Métodos para liberar
                      – objeto.notify()
                         » Libera uno de los que esté esperando
                      – objeto.notifyAll()
                         » Libera a todos los que estén esperando



Programación III                             Tema 8 - Threads
En resumen...

   • Ciclo de vida de un thread:
           – NEW - tras la construcción
           – RUNNABLE - tras start()
                   • BLOCKED
                     – Esperando a entrar en un synchronized (hasta que otro
                       salga)
                   • WAITING
                     – wait (esperando a un notify())
                     – join (esperando a que termine otro/s)
                   • TIMED_WAITING
                     – sleep (esperando un tiempo)
                          » También wait o join con timeout
           – TERMINATED - al acabar el run()
Programación III                           Tema 8 - Threads
Swing
   • No es “thread-safe”
           – Lo seguro es que sólo él acceda a todos los elementos
             visuales (ventanas y componentes en ventanas)
   • Cuidado con las llamadas a Swing desde fuera de
     los eventos
   • Hay tres tipos de threads para swing:
           – El thread inicial (el main)
           – El hilo de gestión de eventos (event dispatcher)
           – Hilos de trabajo (worker threads), si procede




Programación III                    Tema 8 - Threads
Hilo inicial

   • Es el del programa (main). Incluso la creación de
     ventanas puede hacerse de un modo seguro:
           – SwingUtilities.invokeLater( Runnable )
           – "hazlo cuando puedas"
                   public static void main(String[] args) {
                       SwingUtilities.invokeLater( new Runnable() {
                           public void run() {
                               createAndShowGUI();
                           }
                       });
                   }




Programación III                      Tema 8 - Threads
Hilo de gestión de eventos

   • Es el hilo principal de swing
           – Todos los componentes de Swing (excepto los
             explícitamente "thread-safe" que son unos pocos) deben
             ser llamados desde este hilo
                   • Deberían ser tareas pequeñas
                   • Deberían acabar rápido
                   • Si no es así, la gestión de eventos se congela y el IU no responde
           – Para tareas largas hacer la gestión desde fuera del hilo
                   • Cuando se necesite acceder a un componente Swing,
                     invokeLater
                   • Si no se supiera si estamos o no en ese hilo:
                       – javax.swing.SwingUtilities.isEventDispatchThread()




Programación III                               Tema 8 - Threads
Hilos trabajadores
           – Para integrarse con Swing se pueden usar threads
             normales que invoquen runnables de Swing
             cuando lo necesiten
   • Pero también pueden usarse worker
     threads
           – Es una plantilla predefinida de hilo que
             interactúa con Swing:
                   • doInBackground() como un run() que devuelve result
                      – Puede llamar a publish( valor )
                   • process( cola ) recoge la cola de publish
                      – LO LLAMA EL HILO DE GESTION DE EVENTOS
                   • done() se hace al final
Programación III      – LO LLAMA EL HILO Tema 8 GESTION DE EVENTOS
                                          DE - Threads
Resumen: consejos
                   Swing/hilos
   • Sólo utilizar componentes Swing desde el
     hilo de Swing salvo métodos thread-safe
           – En particular, los consultores son siempre más
             seguros que los modificadores
           – invokeLater( r )
           – invokeAndWait( r ) // síncrono
   • Código de los gestores de eventos: breve
   • Crear otro hilo desde el gestor si hace falta
     un código largo
           – A "mano" o usando SwingWorker
Programación III                 Tema 8 - Threads

Weitere ähnliche Inhalte

Was ist angesagt?

Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteTopicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteJosé Antonio Sandoval Acosta
 
Conexion mysql con java usando netbeans
Conexion mysql con java usando netbeansConexion mysql con java usando netbeans
Conexion mysql con java usando netbeansEmerson Garay
 
this keyword in Java.pptx
this keyword in Java.pptxthis keyword in Java.pptx
this keyword in Java.pptxParvizMirzayev2
 
Clases y objetos de java
Clases y objetos de javaClases y objetos de java
Clases y objetos de javainnovalabcun
 
Multithreading In Java
Multithreading In JavaMultithreading In Java
Multithreading In Javaparag
 
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...Edureka!
 
Abstraction java
Abstraction javaAbstraction java
Abstraction javaMahinImran
 
Generic programming in java
Generic programming in javaGeneric programming in java
Generic programming in javaanshu_atri
 
Pilas
PilasPilas
Pilaserik
 
Java Collections
Java CollectionsJava Collections
Java Collectionsparag
 
Unidad 3 graficacion
Unidad 3 graficacionUnidad 3 graficacion
Unidad 3 graficacionAndhy H Palma
 
Java And Multithreading
Java And MultithreadingJava And Multithreading
Java And MultithreadingShraddha
 

Was ist angesagt? (20)

Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteTopicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
 
Conexion mysql con java usando netbeans
Conexion mysql con java usando netbeansConexion mysql con java usando netbeans
Conexion mysql con java usando netbeans
 
this keyword in Java.pptx
this keyword in Java.pptxthis keyword in Java.pptx
this keyword in Java.pptx
 
Clases y objetos de java
Clases y objetos de javaClases y objetos de java
Clases y objetos de java
 
Multithreading In Java
Multithreading In JavaMultithreading In Java
Multithreading In Java
 
Java Collections
Java  Collections Java  Collections
Java Collections
 
Wrapper class
Wrapper classWrapper class
Wrapper class
 
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
Abstraction java
Abstraction javaAbstraction java
Abstraction java
 
Java Spring Framework
Java Spring FrameworkJava Spring Framework
Java Spring Framework
 
String in java
String in javaString in java
String in java
 
Generic programming in java
Generic programming in javaGeneric programming in java
Generic programming in java
 
Pilas
PilasPilas
Pilas
 
NOTACIÓN POSTFIJA E INFIJA - JAVA
NOTACIÓN POSTFIJA E INFIJA - JAVANOTACIÓN POSTFIJA E INFIJA - JAVA
NOTACIÓN POSTFIJA E INFIJA - JAVA
 
Java Collections
Java CollectionsJava Collections
Java Collections
 
Java Strings
Java StringsJava Strings
Java Strings
 
Unidad 3 graficacion
Unidad 3 graficacionUnidad 3 graficacion
Unidad 3 graficacion
 
Java And Multithreading
Java And MultithreadingJava And Multithreading
Java And Multithreading
 
Java String Handling
Java String HandlingJava String Handling
Java String Handling
 

Andere mochten auch

Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gioRobert Wolf
 
Programacion en java
Programacion en javaProgramacion en java
Programacion en javaANGELA FREIRE
 
Flujo de un programa Java (I)
Flujo de un programa Java (I)Flujo de un programa Java (I)
Flujo de un programa Java (I)alvaro gonzalez
 
Certificación java 6 cap 5
Certificación java 6 cap 5Certificación java 6 cap 5
Certificación java 6 cap 5srBichoRaro
 
86535551 ciclo-de-vida-jsf
86535551 ciclo-de-vida-jsf86535551 ciclo-de-vida-jsf
86535551 ciclo-de-vida-jsfpablo lopez
 
Fase 5 ciclo for
Fase 5 ciclo forFase 5 ciclo for
Fase 5 ciclo forluisoctis
 
Ciclos Java - NetsBeans - Algoritmia
Ciclos Java - NetsBeans - AlgoritmiaCiclos Java - NetsBeans - Algoritmia
Ciclos Java - NetsBeans - AlgoritmiaDaniel Gómez
 
Plataforma de programación Java
Plataforma de programación JavaPlataforma de programación Java
Plataforma de programación JavaAntonio Contreras
 
Sentencias de control en java
Sentencias de control en javaSentencias de control en java
Sentencias de control en javaLorenna Glez
 
ProgramacióN En Java Variables Y Ciclos
ProgramacióN En Java Variables Y CiclosProgramacióN En Java Variables Y Ciclos
ProgramacióN En Java Variables Y CiclosAndres Garcia
 
Captura de datos y mensajes Interfaz - JAVA
Captura de datos y mensajes Interfaz - JAVACaptura de datos y mensajes Interfaz - JAVA
Captura de datos y mensajes Interfaz - JAVAJose Diaz Silva
 
Java script(diapositivas)
Java script(diapositivas) Java script(diapositivas)
Java script(diapositivas) Roberto Mejia
 

Andere mochten auch (19)

Multitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplosMultitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplos
 
Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gio
 
Ciclos
CiclosCiclos
Ciclos
 
Programacion en java
Programacion en javaProgramacion en java
Programacion en java
 
Modulo 1
Modulo 1Modulo 1
Modulo 1
 
Flujo de un programa Java (I)
Flujo de un programa Java (I)Flujo de un programa Java (I)
Flujo de un programa Java (I)
 
While do while
While do whileWhile do while
While do while
 
Certificación java 6 cap 5
Certificación java 6 cap 5Certificación java 6 cap 5
Certificación java 6 cap 5
 
86535551 ciclo-de-vida-jsf
86535551 ciclo-de-vida-jsf86535551 ciclo-de-vida-jsf
86535551 ciclo-de-vida-jsf
 
Fase 5 ciclo for
Fase 5 ciclo forFase 5 ciclo for
Fase 5 ciclo for
 
Clojure: Java y Lisp, unidos
Clojure: Java y Lisp, unidosClojure: Java y Lisp, unidos
Clojure: Java y Lisp, unidos
 
Ciclos Java - NetsBeans - Algoritmia
Ciclos Java - NetsBeans - AlgoritmiaCiclos Java - NetsBeans - Algoritmia
Ciclos Java - NetsBeans - Algoritmia
 
Plataforma de programación Java
Plataforma de programación JavaPlataforma de programación Java
Plataforma de programación Java
 
Curso java
Curso javaCurso java
Curso java
 
Sentencias de control en java
Sentencias de control en javaSentencias de control en java
Sentencias de control en java
 
ProgramacióN En Java Variables Y Ciclos
ProgramacióN En Java Variables Y CiclosProgramacióN En Java Variables Y Ciclos
ProgramacióN En Java Variables Y Ciclos
 
Captura de datos y mensajes Interfaz - JAVA
Captura de datos y mensajes Interfaz - JAVACaptura de datos y mensajes Interfaz - JAVA
Captura de datos y mensajes Interfaz - JAVA
 
Java script(diapositivas)
Java script(diapositivas) Java script(diapositivas)
Java script(diapositivas)
 
Java netbeans-clase-001
Java netbeans-clase-001Java netbeans-clase-001
Java netbeans-clase-001
 

Ähnlich wie Programación III (Java) - 08 threads

Ähnlich wie Programación III (Java) - 08 threads (20)

hilosJava.pptx
hilosJava.pptxhilosJava.pptx
hilosJava.pptx
 
Threads.pdf
Threads.pdfThreads.pdf
Threads.pdf
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
 
DIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdfDIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdf
 
Programación multitarea
Programación multitareaProgramación multitarea
Programación multitarea
 
Lps 17 hilos
Lps 17 hilosLps 17 hilos
Lps 17 hilos
 
2o departamental Programacion 3
2o departamental Programacion 32o departamental Programacion 3
2o departamental Programacion 3
 
Thread
ThreadThread
Thread
 
Programando en java
Programando en javaProgramando en java
Programando en java
 
Multitarea
MultitareaMultitarea
Multitarea
 
Threads
ThreadsThreads
Threads
 
Programación III (Java) - 01 Introduccion
Programación III (Java) - 01 IntroduccionProgramación III (Java) - 01 Introduccion
Programación III (Java) - 01 Introduccion
 
Programacion concurrente
Programacion concurrenteProgramacion concurrente
Programacion concurrente
 
Uso de hilos
Uso de hilosUso de hilos
Uso de hilos
 
Thread
ThreadThread
Thread
 
Chap 15apin
Chap 15apinChap 15apin
Chap 15apin
 
DefinicionExplicacionEjemplosdeHilosenJava
DefinicionExplicacionEjemplosdeHilosenJavaDefinicionExplicacionEjemplosdeHilosenJava
DefinicionExplicacionEjemplosdeHilosenJava
 
Threads en java
Threads en javaThreads en java
Threads en java
 
Hilos
HilosHilos
Hilos
 
Threads en Java
Threads en JavaThreads en Java
Threads en Java
 

Mehr von Andoni Eguíluz Morán

Cebek oficina fija oficina movil 2 - 201611
Cebek   oficina fija oficina movil 2 - 201611Cebek   oficina fija oficina movil 2 - 201611
Cebek oficina fija oficina movil 2 - 201611Andoni Eguíluz Morán
 
Cebek - oficina fija oficina movil 1 - 201610
Cebek - oficina fija oficina movil 1 - 201610Cebek - oficina fija oficina movil 1 - 201610
Cebek - oficina fija oficina movil 1 - 201610Andoni Eguíluz Morán
 
El papel de las tic en la construccióLa integración de recursos didácticos di...
El papel de las tic en la construccióLa integración de recursos didácticos di...El papel de las tic en la construccióLa integración de recursos didácticos di...
El papel de las tic en la construccióLa integración de recursos didácticos di...Andoni Eguíluz Morán
 
Falta de profesionales tecnológicos.Cómo lo abordamos
Falta de profesionales tecnológicos.Cómo lo abordamosFalta de profesionales tecnológicos.Cómo lo abordamos
Falta de profesionales tecnológicos.Cómo lo abordamosAndoni Eguíluz Morán
 
Cebek oficina fija oficina movil 2 - 201512
Cebek   oficina fija oficina movil 2 - 201512Cebek   oficina fija oficina movil 2 - 201512
Cebek oficina fija oficina movil 2 - 201512Andoni Eguíluz Morán
 
Cebek - Oficina fija oficina movil 1 - 201512
Cebek - Oficina fija oficina movil 1 - 201512Cebek - Oficina fija oficina movil 1 - 201512
Cebek - Oficina fija oficina movil 1 - 201512Andoni Eguíluz Morán
 
Uso seguro de las TIC en el mundo educativo
Uso seguro de las TIC en el mundo educativoUso seguro de las TIC en el mundo educativo
Uso seguro de las TIC en el mundo educativoAndoni Eguíluz Morán
 
CCD2015 - Creación contenidos digitales
CCD2015 - Creación contenidos digitalesCCD2015 - Creación contenidos digitales
CCD2015 - Creación contenidos digitalesAndoni Eguíluz Morán
 
Cebek - Medidas basicas de seguridad - 201504
Cebek - Medidas basicas de seguridad - 201504Cebek - Medidas basicas de seguridad - 201504
Cebek - Medidas basicas de seguridad - 201504Andoni Eguíluz Morán
 
CYPED 2015 - Comunicación y Participación en Entornos Digitales
CYPED 2015 - Comunicación y Participación en Entornos DigitalesCYPED 2015 - Comunicación y Participación en Entornos Digitales
CYPED 2015 - Comunicación y Participación en Entornos DigitalesAndoni Eguíluz Morán
 
Cebek - jornada identidad digital corporativa
Cebek - jornada identidad digital corporativaCebek - jornada identidad digital corporativa
Cebek - jornada identidad digital corporativaAndoni Eguíluz Morán
 
Gamificación, serious games y negocio (SGGN-1409)
Gamificación, serious games y negocio (SGGN-1409)Gamificación, serious games y negocio (SGGN-1409)
Gamificación, serious games y negocio (SGGN-1409)Andoni Eguíluz Morán
 
Programación III (Java) - 06 Ventanas
Programación III (Java) - 06 VentanasProgramación III (Java) - 06 Ventanas
Programación III (Java) - 06 VentanasAndoni Eguíluz Morán
 
Programación III (Java) - 05 Genericos y Colecciones - java6-7
Programación III (Java) - 05 Genericos y Colecciones - java6-7Programación III (Java) - 05 Genericos y Colecciones - java6-7
Programación III (Java) - 05 Genericos y Colecciones - java6-7Andoni Eguíluz Morán
 

Mehr von Andoni Eguíluz Morán (20)

Cebek oficina fija oficina movil 2 - 201611
Cebek   oficina fija oficina movil 2 - 201611Cebek   oficina fija oficina movil 2 - 201611
Cebek oficina fija oficina movil 2 - 201611
 
Cebek - oficina fija oficina movil 1 - 201610
Cebek - oficina fija oficina movil 1 - 201610Cebek - oficina fija oficina movil 1 - 201610
Cebek - oficina fija oficina movil 1 - 201610
 
El papel de las tic en la construccióLa integración de recursos didácticos di...
El papel de las tic en la construccióLa integración de recursos didácticos di...El papel de las tic en la construccióLa integración de recursos didácticos di...
El papel de las tic en la construccióLa integración de recursos didácticos di...
 
Falta de profesionales tecnológicos.Cómo lo abordamos
Falta de profesionales tecnológicos.Cómo lo abordamosFalta de profesionales tecnológicos.Cómo lo abordamos
Falta de profesionales tecnológicos.Cómo lo abordamos
 
Cebek oficina fija oficina movil 2 - 201512
Cebek   oficina fija oficina movil 2 - 201512Cebek   oficina fija oficina movil 2 - 201512
Cebek oficina fija oficina movil 2 - 201512
 
Cebek - Oficina fija oficina movil 1 - 201512
Cebek - Oficina fija oficina movil 1 - 201512Cebek - Oficina fija oficina movil 1 - 201512
Cebek - Oficina fija oficina movil 1 - 201512
 
Uso seguro de las TIC en el mundo educativo
Uso seguro de las TIC en el mundo educativoUso seguro de las TIC en el mundo educativo
Uso seguro de las TIC en el mundo educativo
 
Uso ético y seguro de las TIC
Uso ético y seguro de las TICUso ético y seguro de las TIC
Uso ético y seguro de las TIC
 
Redes Sociales Educativas
Redes Sociales EducativasRedes Sociales Educativas
Redes Sociales Educativas
 
CCD2015 - Creación contenidos digitales
CCD2015 - Creación contenidos digitalesCCD2015 - Creación contenidos digitales
CCD2015 - Creación contenidos digitales
 
Cebek - Medidas basicas de seguridad - 201504
Cebek - Medidas basicas de seguridad - 201504Cebek - Medidas basicas de seguridad - 201504
Cebek - Medidas basicas de seguridad - 201504
 
CYPED 2015 - Comunicación y Participación en Entornos Digitales
CYPED 2015 - Comunicación y Participación en Entornos DigitalesCYPED 2015 - Comunicación y Participación en Entornos Digitales
CYPED 2015 - Comunicación y Participación en Entornos Digitales
 
Cebek - jornada identidad digital corporativa
Cebek - jornada identidad digital corporativaCebek - jornada identidad digital corporativa
Cebek - jornada identidad digital corporativa
 
Gamificación, serious games y negocio (SGGN-1409)
Gamificación, serious games y negocio (SGGN-1409)Gamificación, serious games y negocio (SGGN-1409)
Gamificación, serious games y negocio (SGGN-1409)
 
SGGN 20140605
SGGN 20140605SGGN 20140605
SGGN 20140605
 
Programación III (Java) - 09 Cierre
Programación III (Java) - 09 CierreProgramación III (Java) - 09 Cierre
Programación III (Java) - 09 Cierre
 
Programación III (Java) - 07b Swing
Programación III (Java) - 07b SwingProgramación III (Java) - 07b Swing
Programación III (Java) - 07b Swing
 
Programación III (Java) - 07 Eventos
Programación III (Java) - 07 EventosProgramación III (Java) - 07 Eventos
Programación III (Java) - 07 Eventos
 
Programación III (Java) - 06 Ventanas
Programación III (Java) - 06 VentanasProgramación III (Java) - 06 Ventanas
Programación III (Java) - 06 Ventanas
 
Programación III (Java) - 05 Genericos y Colecciones - java6-7
Programación III (Java) - 05 Genericos y Colecciones - java6-7Programación III (Java) - 05 Genericos y Colecciones - java6-7
Programación III (Java) - 05 Genericos y Colecciones - java6-7
 

Kürzlich hochgeladen

SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxSIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxLudy Ventocilla Napanga
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptxMonitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptxJUANCARLOSAPARCANARE
 
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTESaraNolasco4
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsxJuanpm27
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadJonathanCovena1
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOweislaco
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfManuel Molina
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfAlfredoRamirez953210
 
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfFichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfssuser50d1252
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicialLorenaSanchez350426
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfcoloncopias5
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfssuser50d1252
 
DETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORDETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORGonella
 
05 Fenomenos fisicos y quimicos de la materia.pdf
05 Fenomenos fisicos y quimicos de la materia.pdf05 Fenomenos fisicos y quimicos de la materia.pdf
05 Fenomenos fisicos y quimicos de la materia.pdfRAMON EUSTAQUIO CARO BAYONA
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALEDUCCUniversidadCatl
 

Kürzlich hochgeladen (20)

SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxSIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
 
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptxMonitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
 
recursos naturales america cuarto basico
recursos naturales america cuarto basicorecursos naturales america cuarto basico
recursos naturales america cuarto basico
 
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTE
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la Sostenibilidad
 
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdfTema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
 
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfFichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicial
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
 
DETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORDETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIOR
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
05 Fenomenos fisicos y quimicos de la materia.pdf
05 Fenomenos fisicos y quimicos de la materia.pdf05 Fenomenos fisicos y quimicos de la materia.pdf
05 Fenomenos fisicos y quimicos de la materia.pdf
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
 

Programación III (Java) - 08 threads

  • 1. 8. Threads (hilos) ¿Qué es un thread? Funcionamiento básico Clase java.lang.Thread Mecanismos de manipulación de threads Ciclo de vida de un thread Métodos sincronizados Programación III Tema 8 - Threads
  • 2. ¿Qué es un thread? • Programación Tradicional – Un procesador → Un flujo de control – Flujo de Control = Flujo de Ejecución = Hilo de Ejecución • Programación multihilo (multithread) – Permite la ocurrencia simultánea de varios flujos de control • Aun cuando siga existiendo un solo procesador – Cada uno de ellos puede programarse independientemente • O no. Puede compartir parte o todo el código con otros – Pueden realizar un trabajo distinto, idéntico o complementario • Un Thread es un hilo de ejecución que... – se ejecuta en paralelo e “independiente” de otros hilos – puede trabajar sobre datos propios o datos compartidos, – puede en un momento dado pararse, reiniciarse, sincronizarse o esperar a otros hilos. Programación III Tema 8 - Threads
  • 3. Un hilo NO ES un código • Sino quien ejecuta secuencialmente ese código Hilo Hilo Hilo Hilo principa thread1 thread2 swing l main (...) { run() { ... ... obj.m1(); o.m1(); ... ... } } mouseClicked() { ... test.m1(); m1 (...) { ... ... } ... } Programación III Tema 8 - Threads
  • 4. Un hilo NO ES su(s) recurso(s) • (recursos, datos, objetos...) hilo 1 hazTortilla() { hilo 2 ... miC = new Cocina(); miC.cogeHuevos(); miC.cogeSarten(); miC.ponFuego(); ... } hilo == persona ("ejecuta") programa == acciones ("receta") datos == objetos ("ingredientes") Programación III Tema 8 - Threads
  • 5. Pero ojo con los recursos compartidos... • Posible lío!!! (luego lo vemos) hilo 1 hilo 2 hazTortilla() { ... miC = laUnicaCocina(); miC.cogeHuevos(); miC.cogeSarten(); miC.ponFuego(); ... } Programación III Tema 8 - Threads
  • 6. Funcionamiento básico (1/2) • Además entonces del hilo principal y del hilo de swing... – podemos crear otros hilos independientes – que se ejecutan en paralelo al código de los demás hilos. • Pero... ¿qué código ejecutan los threads? – Los threads ejecutan el código que se encuentra dentro algún método run()... • bien del propio thread, • bien de otro objeto. Programación III Tema 8 - Threads
  • 7. Funcionamiento básico (2/2) • Método run() del propio Thread – Todo thread posee un método run() que por defecto es el código que se ejecuta cuando se pone en marcha el Thread • Este método por defecto se encuentra vacío  sobreescribir • Método run() de otros objetos – El método run() no es exclusivo de los threads – Otros objetos pueden implementar este método • Interfaz Runnable – Así, un thread también puede ejecutar (como un hilo de ejecución independiente) el método run() de otros objetos Programación III Tema 8 - Threads
  • 8. Clase java.lang.Thread (1/3) • En Java, para trabajar con Threads se utiliza la clase Thread, del paquete java.lang. • Constructores: – Thread( ) • Crea un thread con nombre "Thread-"+n – Thread( String name ) • Crea un thread con el nombre indicado como parámetro. – Thread( Runnable target ) • Crea un thread asociado al objeto destino. – Combinaciones – Uso de grupos de threads Programación III Tema 8 - Threads
  • 9. Clase java.lang.Thread (2/3) • Algunos métodos: – static Thread currentThread() • Devuelve el thread en curso – String getName() – void setName(String name) – int getPriority() – void setPriority(int newPriority) • Asigna prioridades relativas – ThreadGroup getThreadGroup() – void run() Programación III Tema 8 - Threads
  • 10. Clase java.lang.Thread (3/3) • Creación y Puesta en marcha de Threads: – Los Threads, como todo en Java, son objetos – Java necesita saber que se “lanza” un nuevo hilo Para eso se ejecuta el método start() – Por ejemplo: Thread miThread = new Thread(); MiThread.start(); – Así, tenemos un thread que no hace nada, cuando se invoca el método start() no se ejecuta ningún código porque por defecto el método run() de un thread está vacío. Programación III Tema 8 - Threads
  • 11. Creando threads (1/4) • Existen dos mecanismos para trabajar con Threads: – Heredar de la clase Thread – Implementar el interface Runnable • 1. Heredando de la clase Thread – Se hereda de la clase Thread y se sobrescribe el método run() Ejemplo: ThreadHeredando.java Programación III Tema 8 - Threads
  • 12. Creando threads (2/4) • Salida obtenida: Final del main 1111111111111111111111111111111222222222222 2222222222222222222222122111111112211222111 1111111111111111111111111222222222222222222 2211122222222222211111111111111111111111111 1222222222222222222222222222 • ¿Por qué el desorden? Cada salida puede diferir – Una vez lanzados, no sabemos cuál será el tiempo de ejecución de los hilos • ¿Cuántos hilos de ejecución existen en este ejemplo?  3 – El hilo de ejecución del thread t1 – El hilo de ejecución del thread t2 – El hilo de ejecución del main Programación III Tema 8 - Threads
  • 13. Creando threads (3/4) • 2. Implementando el interfaz Runnable – El interface Runnable (java.lang.Runnable) sólo tiene un método: public interface Runnable { void run(); } – Procedimiento: • Crear una clase que implemente el interface Runnable • Crear un objeto de esa clase • Vincular ese objeto a un thread – Resultado: • Al poner en marcha el thread, éste ejecutará el código que el objeto posea en su método run() Programación III Tema 8 - Threads
  • 14. Creando threads (4/4) • Por ejemplo: Class MiRunnable implements Runnable { void run() { // haz algo } public static void main( String[] args ) { Runnable objeto = new MiRunnable(); Thread hilo = new Thread( objeto ); hilo.start(); } • hilo.start() -> objeto.run() Programación III Tema 8 - Threads
  • 15. Esperando a que un hilo acabe (1) • Otro ejemplo (HiloEjemploRunnable.java): class HiloEjemplo implements Runnable { static long horaInicio = System.currentTimeMillis(); int cont = 0; int num; HiloEjemplo( int numObjeto ) { num = numObjeto; } public void run() { while( System.currentTimeMillis()-horaInicio < 3000) { System.out.print( num ); cont++; } } public void visualizar() { System.out.println( "Objeto num. " + num + " - " + cont + " veces." ); } } Programación III Tema 8 - Threads
  • 16. Esperando a que un hilo acabe (2) • Posible main(): Thread[] t = new Thread [4]; HiloEjemplo[] o = new HiloEjemplo[4]; for (int i = 0; i < 4; i++) { o[i] = new HiloEjemplo(i); t[i] = new Thread(o[i], "Objeto-" + i); System.out.println( "nuevo Thread() " + (t[i]==null?"fallo":"correcto")+" - "+t[i].getName() ); } for (int i = 0; i < 4; i++) t[i].start(); try { for (int i = 0; i < 4; i++) t[i].join(); } catch (InterruptedException e) { } for (int i = 0; i < 4; i++) o[i].visualizar(); • El hilo que hace el join espera a que el hilo de ese objeto finalice Programación III Tema 8 - Threads
  • 17. Esperando a que un hilo acabe (3) • Salida obtenida: nuevo Thread() correcto - Objeto-0 nuevo Thread() correcto - Objeto-1 nuevo Thread() correcto - Objeto-2 nuevo Thread() correcto - Objeto-3 0000000000000000000000000000000000000000011111111 1120312033333333312000000000031111111111203120311 1111111203111111111111122222222222000002333111111 1 (…) 2331111111112301233301230111111111111111122222333 3012222222222223000000111111111111111111111222222 222222222222222223000000000031203 Objeto num. 0 - 297 veces. Objeto num. 1 - 341 veces. Objeto num. 2 - 213 veces. Programación III Objeto num. 3 - 302 veces. Tema 8 - Threads
  • 18. Ciclo de vida de un thread (1) Bloqueado Esperando Esperando-tiempo • getState()  Thread.State – NEW – RUNNABLE – BLOCKED, WAITING, TIMED_WAITING – TERMINATED Programación III Tema 8 - Threads
  • 19. Ciclo de vida de un thread (2) • Estado TIMED_WAITING: – Método sleep() • Método de clase (static) que permite dejar dormido (not runnable ) al thread en curso durante un determinado tiempo – En este estado el thread no consume recursos  no es candidato a ser elegido por el dispatcher para su ejecución ... Thread.sleep(1000); ... • El thread que estaba ejecutando ese código (thread en curso) se duerme durante 1 segundo  el código no continua ejecutándose hasta al menos 1 segundo • La temporización no es exacta! Programación III Tema 8 - Threads
  • 20. Interrupción de hilos • sleep puede lanzar InterruptedException • Eso ocurre si algún otro hilo le interrumpe: – Método Thread.interrupt() en el objeto a ser interrumpido – Fuera del sleep, la interrupción debe ser gestionada por el programador en el run(): public void run() { while(System.currentTimeMillis()-horaInicio<3000) { System.out.print( num ); cont++; if (Thread.interrupted()) break; } } Programación III Tema 8 - Threads
  • 21. Sincronización de hilos (1) • Programar en varios hilos tiene muchas ventajas pero algunos peligros – ¿Y si varios acceden al mismo dato? – ¿Y si varios ejecutan el mismo método? • (EjemploProblemasSincronizacion.java) • ¿Cómo solucionamos estos problemas? esp[183452].fecundaOvulo(ov) yo.veAlBaño(unicoBaño) Programación III Tema 8 - Threads
  • 22. Sincronización de hilos (2) • Modificador synchronized • Puede aplicarse sobre: – Un método de instancia • En cada momento sólo habrá un hilo ejecutando un método sincronizado sobre cada objeto – Un método de clase • En cada momento sólo puede haber un thread ejecutando un método sincronizado sobre la clase o cualquier objeto de la clase – Un objeto tal cual - synchronized(obj) • Bloquea a los que no pueden "entrar" • (EjemploProblemasSincronizacion2.java) Programación III Tema 8 - Threads
  • 23. Sincronización de hilos (3) • Entonces ¿mejor sincronizamos todos los métodos? – No. Es menos eficiente (tiempo de ejecución) – Y puede dar lugar a interbloqueos (un gran peligro de la programación multihilo) • (EjemploProblemasInterbloqueos.java) • Sincronicemos con prudencia – Evitando interbloqueos Programación III Tema 8 - Threads
  • 24. Sincronización de hilos (4) • Estado WAITING: – Método objeto.wait() • Causa que el thread en curso se quede esperando – Ligado a un objeto • Hasta que otro thread “libere” – A ese mismo objeto • Métodos para liberar – objeto.notify() » Libera uno de los que esté esperando – objeto.notifyAll() » Libera a todos los que estén esperando Programación III Tema 8 - Threads
  • 25. En resumen... • Ciclo de vida de un thread: – NEW - tras la construcción – RUNNABLE - tras start() • BLOCKED – Esperando a entrar en un synchronized (hasta que otro salga) • WAITING – wait (esperando a un notify()) – join (esperando a que termine otro/s) • TIMED_WAITING – sleep (esperando un tiempo) » También wait o join con timeout – TERMINATED - al acabar el run() Programación III Tema 8 - Threads
  • 26. Swing • No es “thread-safe” – Lo seguro es que sólo él acceda a todos los elementos visuales (ventanas y componentes en ventanas) • Cuidado con las llamadas a Swing desde fuera de los eventos • Hay tres tipos de threads para swing: – El thread inicial (el main) – El hilo de gestión de eventos (event dispatcher) – Hilos de trabajo (worker threads), si procede Programación III Tema 8 - Threads
  • 27. Hilo inicial • Es el del programa (main). Incluso la creación de ventanas puede hacerse de un modo seguro: – SwingUtilities.invokeLater( Runnable ) – "hazlo cuando puedas" public static void main(String[] args) { SwingUtilities.invokeLater( new Runnable() { public void run() { createAndShowGUI(); } }); } Programación III Tema 8 - Threads
  • 28. Hilo de gestión de eventos • Es el hilo principal de swing – Todos los componentes de Swing (excepto los explícitamente "thread-safe" que son unos pocos) deben ser llamados desde este hilo • Deberían ser tareas pequeñas • Deberían acabar rápido • Si no es así, la gestión de eventos se congela y el IU no responde – Para tareas largas hacer la gestión desde fuera del hilo • Cuando se necesite acceder a un componente Swing, invokeLater • Si no se supiera si estamos o no en ese hilo: – javax.swing.SwingUtilities.isEventDispatchThread() Programación III Tema 8 - Threads
  • 29. Hilos trabajadores – Para integrarse con Swing se pueden usar threads normales que invoquen runnables de Swing cuando lo necesiten • Pero también pueden usarse worker threads – Es una plantilla predefinida de hilo que interactúa con Swing: • doInBackground() como un run() que devuelve result – Puede llamar a publish( valor ) • process( cola ) recoge la cola de publish – LO LLAMA EL HILO DE GESTION DE EVENTOS • done() se hace al final Programación III – LO LLAMA EL HILO Tema 8 GESTION DE EVENTOS DE - Threads
  • 30. Resumen: consejos Swing/hilos • Sólo utilizar componentes Swing desde el hilo de Swing salvo métodos thread-safe – En particular, los consultores son siempre más seguros que los modificadores – invokeLater( r ) – invokeAndWait( r ) // síncrono • Código de los gestores de eventos: breve • Crear otro hilo desde el gestor si hace falta un código largo – A "mano" o usando SwingWorker Programación III Tema 8 - Threads