SlideShare a Scribd company logo
1 of 4
Download to read offline
Oracle Certified Professional, Java SE 6 Programmer (1Z0-851)   - Guía practica 4 de 7.


Esta guía práctica cubre la siguiente sección del examen:

Sección 4: Concurrencia

4.1.   Escribir código para definir, instanciar e iniciar hilos nuevos usando
       java.lang.Thread o java.lang.Runnable.
4.2.   Reconocer el estado en el cual el hilo puede existir e identificar caminos en
       los cuales un hilo puede transitar de un estado a otro.
4.3.   Dado un escenario, escribir código que haga apropiado uso del bloqueo de
       objetos para proteger variables estáticas o de instancia del problema del
       acceso concurrente.




Oscar Vásquez Flores (eoscarvf@gmail.com )
Oracle Certified Professional, Java SE 6 Programmer (1Z0-851)   - Guía practica 4 de 7.


4.1. Escribir código para definir, instanciar e iniciar hilos nuevos usando
java.lang.Thread o java.lang.Runnable.

❑ Los hilos pueden ser creados por extender la clase Thread y sobre escribir el metodo
public void run().

❑ Los hilos también pueden ser creado por llamar al constructor de Thread que tiene
como argumento a un Runnable. El objeto Runnable se dice que es el objetivo del hilo.

❑ Se puede llamar a start() en un objeto Thread solamente una vez. Si se invoca más de
una vez se lanza RuntimeException.

❑ Es legal crear varios objetos Thread utilizando el mismo objeto Runnable como
objetivo.

❑ Cuando un objeto Thread es creado no se inicia de forma automática, es necesario
invocar al metodo start() para que se ejecute. Cuando un objeto Thread existe pero no se
a iniciado, este se encuentra en el estado new, el cual es diferente al estado alive.

4.2.    Reconocer el estado en el cual el hilo puede existir e identificar
        caminos en los cuales un hilo puede transitar de un estado a otro.

❑ Una vez que es iniciado una thread nueva, esta siempre entra al estado runnable.

❑ El thread scheduler puede mover una thread entre el estado runnable y el estado
running.

❑ Para un maquina típica de un solo procesador, únicamente una thread puede esta en
estado running en un tiempo, aunque varias threads pueden estar en estado runnable.

❑ No hay garantía en el orden en el cual las threads que han sido iniciadas, determine el
orden en la cual ellas se ejecuten.

❑ No hay garantía que los threads se turnen de forma equivalente. Esto depende del
thread scheduler y según lo determinado por cada implementación de JVM.
Si se desea una garantía que los threads se turnen de forma independiente a la JVM, se
puede utilizar el metodo sleep(), esto impide que el thread acapare el proceso de
ejecución mientras que otra thread no tiene asignación de proceso. Aunque en la mayoría
de los casos basta con invocar al metodo yield() para que los threads trabajen bien juntos.

❑ Una thread que esta en estado running puede entrar al estado blocked/waiting por
invocación al metodo wait(), sleep() o join().

❑ Una thread en estado running puede entrar al estado blocked/wating porque no puede
adquirir el control de bloqueo de un bloque de código sincronizado.

❑ Cuando el sleep() o wait() a terminado, o un objeto bloqueado se convierte en
disponible, el thread puede únicamente reingresar al estado runnable.

❑ Una thread en estado dead no puede ser iniciada otra vez.

❑ Se manda a dormir a la thread para demorar su ejecución por un periodo de tiempo y
los bloqueos no son liberados durante este tiempo.




Oscar Vásquez Flores (eoscarvf@gmail.com )
Oracle Certified Professional, Java SE 6 Programmer (1Z0-851)     - Guía practica 4 de 7.


❑ Se garantiza que el tiempo para dormir de un thread sea por lo menos el tiempo que se
indique en el argumento de sleep(), al menos que sea interrumpido. Perro no se garantiza
en que momento esa thread volverá a estar en estado running.

❑ El metodo sleep() es static el cual provoca que la thread duerma, estando en estado
running. Una thread no puede invocar el metodo sleep() de otro thread, la invocación
siempre es desde la misma clase.

❑ El metodo setPriority() es utilizado en un objeto Thread para dar una prioridad de
1(Bajo) a 10(Alto), aunque las prioridades no son garantizadas y no todos los JVMs
reconocen estos 10 niveles de prioridad, algunos niveles pueden ser tratados como
iguales.

❑ Si no se modifica de forma explicita la prioridad de una thread, es igual a la prioridad de
la thread que la creo.

❑ El metodo yield() puede causar que una thread deje de correr, si hay threads en
estado runnable de la misma prioridad, no hay garantía de que esto pase, y no hay
garantía que cuando el thread deje de correr y regrese al estado runnable, sea otra thread
la que se coloque en estado running (Puede volver a ser la misma).
Una thread puede ejecutar el yield() e inmediatamente reingrese al estado running.

❑ Lo más parecido a una garantía es que en cualquier tiempo dado cuando una thread
esta corriendo usualmente no tiene una prioridad mas bajo que los threads que están en
estado runnable. Si una thread de prioridad baja esta corriendo cuando una thread de
prioridad alta entra al estado runnable, el JVM usualmente se adelanta a la ejecución de
baja prioridad y colocara al thread de alta prioridad en running.

❑ Cuando una thread1 invoca al metodo join() de otra thread2, la thread1 que esta
corriendo espera hasta que la thread2 se haya completado. Es decir el metodo join() le
dice a la thread2 que queremos juntarnos al finalizar esta y que nos avise, entonces por el
momento la thread1 puede entrar al estado runnable.

4.3.    Dado un escenario, escribir código que haga apropiado uso del
        bloqueo de objetos para proteger variables estáticas o de instancia
        del problema del acceso concurrente.

❑ Los métodos synchronized permiten que solo una thread esta trabajando con ese
metodo en un determinado momento.

❑ synchronized se utiliza para marcar metodos y bloques de código (es decir solo una
parte del cuerpo de un metodo).

❑ Para sincronizar un bloque de código (Es decir solo una pequeña porción del cuerpo
del metodo), se debe especificar un argumento al synchronized, el cual debe ser el objeto
cuyo bloqueo queremos sincronizar.

❑ Si un objeto tiene partes que no están marcadas con synchronized esas si pueden ser
accedidas por varias threads de forma simultanea.

❑ Cuando una thread es enviada a dormir, lo que tenga bloqueado no estará disponible
para otras threads.

❑ Los métodos static pueden ser synchronized, utilizando el bloqueo de una
instancia de java.lang.Class representando la clase.


Oscar Vásquez Flores (eoscarvf@gmail.com )
Oracle Certified Professional, Java SE 6 Programmer (1Z0-851)    - Guía practica 4 de 7.




❑ Un deadlocking es cuando la ejecución de una thread se queda a la mitad y el código
esta esperando que el bloqueo sea removido de algún objeto.

❑ Deadlocking puede ocurrir cuando un objeto bloqueado intenta acceder a otro objeto
bloqueado el cual intenta accede al primer objeto bloqueada. En otras palabras, ambos
threads están esperando que el otro libere el objeto bloqueado, de esta forma el bloqueo
nunca se libera.

❑ Un Deadlocking es algo incorrecto, se debe evitar esto.

❑ El metodo wait() permite decir a un hilo:
No hay nada que yo pueda hacer por ahora, entonces colócame en un pool de espera y
notifícame cuando algo pase y yo este involucrado.
Básicamente un wait() significa:
Mantenme en espera en el pool o agrégame en la lista de espera.

❑ El metodo notify() es usado para enviar una señal a una y solo a una de las threads
que están esperando por el mismo objeto bloqueado.

❑ El metodo notify() no puede especificar cual thread que espera será notificada.

❑ El metodo notifyAll() trabaja igual que notify(), pero envía la señal a todos las threads
que esperan sobre el objeto.

❑ Los tres métodos: wait(), notify() y notifyAll() deberán ser invocados dentro de un
contexto synchronized. Una thread invoca a un wait() o notify() sobre una objeto
particular, el thread deberá sostener el bloqueo sobre el objeto.




Oscar Vásquez Flores (eoscarvf@gmail.com )

More Related Content

What's hot (19)

2o departamental Programacion 3
2o departamental Programacion 32o departamental Programacion 3
2o departamental Programacion 3
 
Chap 15apin
Chap 15apinChap 15apin
Chap 15apin
 
Chap 15cpin
Chap 15cpinChap 15cpin
Chap 15cpin
 
Capitulo 8 9-10
Capitulo 8 9-10Capitulo 8 9-10
Capitulo 8 9-10
 
Programacion concurrente
Programacion concurrenteProgramacion concurrente
Programacion concurrente
 
Threads en Java
Threads en JavaThreads en Java
Threads en Java
 
Hilos – threads en java
Hilos – threads   en javaHilos – threads   en java
Hilos – threads en java
 
3 java sesin 3 pps
3 java sesin 3 pps3 java sesin 3 pps
3 java sesin 3 pps
 
Hilos En Java
Hilos En JavaHilos En Java
Hilos En Java
 
Java Threads (Hilos en Java)
Java Threads (Hilos en Java)Java Threads (Hilos en Java)
Java Threads (Hilos en Java)
 
Multitarea e hilos en java
Multitarea e hilos en javaMultitarea e hilos en java
Multitarea e hilos en java
 
Sincronizacion
SincronizacionSincronizacion
Sincronizacion
 
Uso de hilos
Uso de hilosUso de hilos
Uso de hilos
 
De Threads a CompletableFutures
De Threads a CompletableFuturesDe Threads a CompletableFutures
De Threads a CompletableFutures
 
Programando en java
Programando en javaProgramando en java
Programando en java
 
Threads
ThreadsThreads
Threads
 
Thread group demonios- parte1
Thread group demonios- parte1Thread group demonios- parte1
Thread group demonios- parte1
 
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
 
Programación multitarea
Programación multitareaProgramación multitarea
Programación multitarea
 

Viewers also liked

OCP, JSE 6 Programmer (1Z0-851) - Guia practica 5 de 7(OO) v1
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 5 de 7(OO) v1OCP, JSE 6 Programmer (1Z0-851) - Guia practica 5 de 7(OO) v1
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 5 de 7(OO) v1Oscar V
 
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)Oscar V
 
Proceso para el registro o compra de exámenes de certificación en java
Proceso para el registro o compra de exámenes de certificación en javaProceso para el registro o compra de exámenes de certificación en java
Proceso para el registro o compra de exámenes de certificación en javaOscar V
 
Ocp, jse 6 programmer (1 z0 851) - guia practica 7 de 7(fundamentos) v1
Ocp, jse 6 programmer (1 z0 851) - guia practica 7 de 7(fundamentos) v1Ocp, jse 6 programmer (1 z0 851) - guia practica 7 de 7(fundamentos) v1
Ocp, jse 6 programmer (1 z0 851) - guia practica 7 de 7(fundamentos) v1Oscar V
 
WMB for z/OS - Configuracion del nodo CICSRequest en z/OS
WMB for z/OS - Configuracion del nodo CICSRequest en z/OSWMB for z/OS - Configuracion del nodo CICSRequest en z/OS
WMB for z/OS - Configuracion del nodo CICSRequest en z/OSOscar V
 
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...Oscar V
 
OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)Oscar V
 
OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)
OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)
OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)Oscar V
 
Administracion de WebSphere MQ for zOS v7.0
Administracion de WebSphere MQ for zOS v7.0Administracion de WebSphere MQ for zOS v7.0
Administracion de WebSphere MQ for zOS v7.0Oscar V
 
Guia de estudio OCP Java SE 7 Programmer
Guia de estudio OCP Java SE 7 ProgrammerGuia de estudio OCP Java SE 7 Programmer
Guia de estudio OCP Java SE 7 ProgrammerOscar V
 
Oracle Certified Expert, Java EE 6 Web Service Developer
Oracle Certified Expert, Java EE 6 Web Service DeveloperOracle Certified Expert, Java EE 6 Web Service Developer
Oracle Certified Expert, Java EE 6 Web Service DeveloperOscar V
 
Guia de estudio OCA Java SE 7 Programmer
Guia de estudio OCA Java SE 7 ProgrammerGuia de estudio OCA Java SE 7 Programmer
Guia de estudio OCA Java SE 7 ProgrammerOscar V
 
Curso de JBPM5 - Laboratorios
Curso de JBPM5 - LaboratoriosCurso de JBPM5 - Laboratorios
Curso de JBPM5 - LaboratoriosOscar V
 
Preparacion Ambiente Wmb6.X
Preparacion Ambiente Wmb6.XPreparacion Ambiente Wmb6.X
Preparacion Ambiente Wmb6.XOscar V
 
Curso de JBPM5
Curso de JBPM5Curso de JBPM5
Curso de JBPM5Oscar V
 
Guia de estudio para Oracle Certified Java EE 6 Web Component Developer
Guia de estudio para Oracle Certified Java EE 6 Web Component DeveloperGuia de estudio para Oracle Certified Java EE 6 Web Component Developer
Guia de estudio para Oracle Certified Java EE 6 Web Component DeveloperOscar V
 

Viewers also liked (16)

OCP, JSE 6 Programmer (1Z0-851) - Guia practica 5 de 7(OO) v1
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 5 de 7(OO) v1OCP, JSE 6 Programmer (1Z0-851) - Guia practica 5 de 7(OO) v1
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 5 de 7(OO) v1
 
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
 
Proceso para el registro o compra de exámenes de certificación en java
Proceso para el registro o compra de exámenes de certificación en javaProceso para el registro o compra de exámenes de certificación en java
Proceso para el registro o compra de exámenes de certificación en java
 
Ocp, jse 6 programmer (1 z0 851) - guia practica 7 de 7(fundamentos) v1
Ocp, jse 6 programmer (1 z0 851) - guia practica 7 de 7(fundamentos) v1Ocp, jse 6 programmer (1 z0 851) - guia practica 7 de 7(fundamentos) v1
Ocp, jse 6 programmer (1 z0 851) - guia practica 7 de 7(fundamentos) v1
 
WMB for z/OS - Configuracion del nodo CICSRequest en z/OS
WMB for z/OS - Configuracion del nodo CICSRequest en z/OSWMB for z/OS - Configuracion del nodo CICSRequest en z/OS
WMB for z/OS - Configuracion del nodo CICSRequest en z/OS
 
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...
 
OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
 
OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)
OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)
OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)
 
Administracion de WebSphere MQ for zOS v7.0
Administracion de WebSphere MQ for zOS v7.0Administracion de WebSphere MQ for zOS v7.0
Administracion de WebSphere MQ for zOS v7.0
 
Guia de estudio OCP Java SE 7 Programmer
Guia de estudio OCP Java SE 7 ProgrammerGuia de estudio OCP Java SE 7 Programmer
Guia de estudio OCP Java SE 7 Programmer
 
Oracle Certified Expert, Java EE 6 Web Service Developer
Oracle Certified Expert, Java EE 6 Web Service DeveloperOracle Certified Expert, Java EE 6 Web Service Developer
Oracle Certified Expert, Java EE 6 Web Service Developer
 
Guia de estudio OCA Java SE 7 Programmer
Guia de estudio OCA Java SE 7 ProgrammerGuia de estudio OCA Java SE 7 Programmer
Guia de estudio OCA Java SE 7 Programmer
 
Curso de JBPM5 - Laboratorios
Curso de JBPM5 - LaboratoriosCurso de JBPM5 - Laboratorios
Curso de JBPM5 - Laboratorios
 
Preparacion Ambiente Wmb6.X
Preparacion Ambiente Wmb6.XPreparacion Ambiente Wmb6.X
Preparacion Ambiente Wmb6.X
 
Curso de JBPM5
Curso de JBPM5Curso de JBPM5
Curso de JBPM5
 
Guia de estudio para Oracle Certified Java EE 6 Web Component Developer
Guia de estudio para Oracle Certified Java EE 6 Web Component DeveloperGuia de estudio para Oracle Certified Java EE 6 Web Component Developer
Guia de estudio para Oracle Certified Java EE 6 Web Component Developer
 

Similar to Ocp, jse 6 programmer (1 z0 851) - guia practica 4 de 7(concurrencia) v1

SCJP, Clase 9: Threads
SCJP, Clase 9: ThreadsSCJP, Clase 9: Threads
SCJP, Clase 9: Threadsflekoso
 
Programación multihebra en java
Programación multihebra en javaProgramación multihebra en java
Programación multihebra en javaLaboratorios ACME
 
DefinicionExplicacionEjemplosdeHilosenJava
DefinicionExplicacionEjemplosdeHilosenJavaDefinicionExplicacionEjemplosdeHilosenJava
DefinicionExplicacionEjemplosdeHilosenJavaDanielCorzo12
 
DIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdfDIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdfDaveParker23
 
Revista java world cap 8,9,10
Revista java world cap 8,9,10Revista java world cap 8,9,10
Revista java world cap 8,9,10Hack '
 
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
 
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 concurrenteJosé Antonio Sandoval Acosta
 
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
 
Guia1 programacion de-procesos_concurrentes-hilos
Guia1 programacion de-procesos_concurrentes-hilosGuia1 programacion de-procesos_concurrentes-hilos
Guia1 programacion de-procesos_concurrentes-hilosharoldhicc
 
Threads en java
Threads en javaThreads en java
Threads en javajent46
 
programacion concurrente java.pptx
programacion concurrente java.pptxprogramacion concurrente java.pptx
programacion concurrente java.pptxjuan gonzalez
 

Similar to Ocp, jse 6 programmer (1 z0 851) - guia practica 4 de 7(concurrencia) v1 (20)

Thread 02
Thread 02Thread 02
Thread 02
 
SCJP, Clase 9: Threads
SCJP, Clase 9: ThreadsSCJP, Clase 9: Threads
SCJP, Clase 9: Threads
 
Hilos
HilosHilos
Hilos
 
Multitarea
MultitareaMultitarea
Multitarea
 
Thread 01
Thread 01Thread 01
Thread 01
 
Programación multihebra en java
Programación multihebra en javaProgramación multihebra en java
Programación multihebra en java
 
DefinicionExplicacionEjemplosdeHilosenJava
DefinicionExplicacionEjemplosdeHilosenJavaDefinicionExplicacionEjemplosdeHilosenJava
DefinicionExplicacionEjemplosdeHilosenJava
 
DIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdfDIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdf
 
Revista java world cap 8,9,10
Revista java world cap 8,9,10Revista java world cap 8,9,10
Revista java world cap 8,9,10
 
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
 
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
 
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
 
hilosJava.pptx
hilosJava.pptxhilosJava.pptx
hilosJava.pptx
 
Guia1 programacion de-procesos_concurrentes-hilos
Guia1 programacion de-procesos_concurrentes-hilosGuia1 programacion de-procesos_concurrentes-hilos
Guia1 programacion de-procesos_concurrentes-hilos
 
Subprocesamiento Mùltiple
Subprocesamiento MùltipleSubprocesamiento Mùltiple
Subprocesamiento Mùltiple
 
Threads en java
Threads en javaThreads en java
Threads en java
 
Hilos
HilosHilos
Hilos
 
programacion concurrente java.pptx
programacion concurrente java.pptxprogramacion concurrente java.pptx
programacion concurrente java.pptx
 
Lab5 guia
Lab5 guiaLab5 guia
Lab5 guia
 

Ocp, jse 6 programmer (1 z0 851) - guia practica 4 de 7(concurrencia) v1

  • 1. Oracle Certified Professional, Java SE 6 Programmer (1Z0-851) - Guía practica 4 de 7. Esta guía práctica cubre la siguiente sección del examen: Sección 4: Concurrencia 4.1. Escribir código para definir, instanciar e iniciar hilos nuevos usando java.lang.Thread o java.lang.Runnable. 4.2. Reconocer el estado en el cual el hilo puede existir e identificar caminos en los cuales un hilo puede transitar de un estado a otro. 4.3. Dado un escenario, escribir código que haga apropiado uso del bloqueo de objetos para proteger variables estáticas o de instancia del problema del acceso concurrente. Oscar Vásquez Flores (eoscarvf@gmail.com )
  • 2. Oracle Certified Professional, Java SE 6 Programmer (1Z0-851) - Guía practica 4 de 7. 4.1. Escribir código para definir, instanciar e iniciar hilos nuevos usando java.lang.Thread o java.lang.Runnable. ❑ Los hilos pueden ser creados por extender la clase Thread y sobre escribir el metodo public void run(). ❑ Los hilos también pueden ser creado por llamar al constructor de Thread que tiene como argumento a un Runnable. El objeto Runnable se dice que es el objetivo del hilo. ❑ Se puede llamar a start() en un objeto Thread solamente una vez. Si se invoca más de una vez se lanza RuntimeException. ❑ Es legal crear varios objetos Thread utilizando el mismo objeto Runnable como objetivo. ❑ Cuando un objeto Thread es creado no se inicia de forma automática, es necesario invocar al metodo start() para que se ejecute. Cuando un objeto Thread existe pero no se a iniciado, este se encuentra en el estado new, el cual es diferente al estado alive. 4.2. Reconocer el estado en el cual el hilo puede existir e identificar caminos en los cuales un hilo puede transitar de un estado a otro. ❑ Una vez que es iniciado una thread nueva, esta siempre entra al estado runnable. ❑ El thread scheduler puede mover una thread entre el estado runnable y el estado running. ❑ Para un maquina típica de un solo procesador, únicamente una thread puede esta en estado running en un tiempo, aunque varias threads pueden estar en estado runnable. ❑ No hay garantía en el orden en el cual las threads que han sido iniciadas, determine el orden en la cual ellas se ejecuten. ❑ No hay garantía que los threads se turnen de forma equivalente. Esto depende del thread scheduler y según lo determinado por cada implementación de JVM. Si se desea una garantía que los threads se turnen de forma independiente a la JVM, se puede utilizar el metodo sleep(), esto impide que el thread acapare el proceso de ejecución mientras que otra thread no tiene asignación de proceso. Aunque en la mayoría de los casos basta con invocar al metodo yield() para que los threads trabajen bien juntos. ❑ Una thread que esta en estado running puede entrar al estado blocked/waiting por invocación al metodo wait(), sleep() o join(). ❑ Una thread en estado running puede entrar al estado blocked/wating porque no puede adquirir el control de bloqueo de un bloque de código sincronizado. ❑ Cuando el sleep() o wait() a terminado, o un objeto bloqueado se convierte en disponible, el thread puede únicamente reingresar al estado runnable. ❑ Una thread en estado dead no puede ser iniciada otra vez. ❑ Se manda a dormir a la thread para demorar su ejecución por un periodo de tiempo y los bloqueos no son liberados durante este tiempo. Oscar Vásquez Flores (eoscarvf@gmail.com )
  • 3. Oracle Certified Professional, Java SE 6 Programmer (1Z0-851) - Guía practica 4 de 7. ❑ Se garantiza que el tiempo para dormir de un thread sea por lo menos el tiempo que se indique en el argumento de sleep(), al menos que sea interrumpido. Perro no se garantiza en que momento esa thread volverá a estar en estado running. ❑ El metodo sleep() es static el cual provoca que la thread duerma, estando en estado running. Una thread no puede invocar el metodo sleep() de otro thread, la invocación siempre es desde la misma clase. ❑ El metodo setPriority() es utilizado en un objeto Thread para dar una prioridad de 1(Bajo) a 10(Alto), aunque las prioridades no son garantizadas y no todos los JVMs reconocen estos 10 niveles de prioridad, algunos niveles pueden ser tratados como iguales. ❑ Si no se modifica de forma explicita la prioridad de una thread, es igual a la prioridad de la thread que la creo. ❑ El metodo yield() puede causar que una thread deje de correr, si hay threads en estado runnable de la misma prioridad, no hay garantía de que esto pase, y no hay garantía que cuando el thread deje de correr y regrese al estado runnable, sea otra thread la que se coloque en estado running (Puede volver a ser la misma). Una thread puede ejecutar el yield() e inmediatamente reingrese al estado running. ❑ Lo más parecido a una garantía es que en cualquier tiempo dado cuando una thread esta corriendo usualmente no tiene una prioridad mas bajo que los threads que están en estado runnable. Si una thread de prioridad baja esta corriendo cuando una thread de prioridad alta entra al estado runnable, el JVM usualmente se adelanta a la ejecución de baja prioridad y colocara al thread de alta prioridad en running. ❑ Cuando una thread1 invoca al metodo join() de otra thread2, la thread1 que esta corriendo espera hasta que la thread2 se haya completado. Es decir el metodo join() le dice a la thread2 que queremos juntarnos al finalizar esta y que nos avise, entonces por el momento la thread1 puede entrar al estado runnable. 4.3. Dado un escenario, escribir código que haga apropiado uso del bloqueo de objetos para proteger variables estáticas o de instancia del problema del acceso concurrente. ❑ Los métodos synchronized permiten que solo una thread esta trabajando con ese metodo en un determinado momento. ❑ synchronized se utiliza para marcar metodos y bloques de código (es decir solo una parte del cuerpo de un metodo). ❑ Para sincronizar un bloque de código (Es decir solo una pequeña porción del cuerpo del metodo), se debe especificar un argumento al synchronized, el cual debe ser el objeto cuyo bloqueo queremos sincronizar. ❑ Si un objeto tiene partes que no están marcadas con synchronized esas si pueden ser accedidas por varias threads de forma simultanea. ❑ Cuando una thread es enviada a dormir, lo que tenga bloqueado no estará disponible para otras threads. ❑ Los métodos static pueden ser synchronized, utilizando el bloqueo de una instancia de java.lang.Class representando la clase. Oscar Vásquez Flores (eoscarvf@gmail.com )
  • 4. Oracle Certified Professional, Java SE 6 Programmer (1Z0-851) - Guía practica 4 de 7. ❑ Un deadlocking es cuando la ejecución de una thread se queda a la mitad y el código esta esperando que el bloqueo sea removido de algún objeto. ❑ Deadlocking puede ocurrir cuando un objeto bloqueado intenta acceder a otro objeto bloqueado el cual intenta accede al primer objeto bloqueada. En otras palabras, ambos threads están esperando que el otro libere el objeto bloqueado, de esta forma el bloqueo nunca se libera. ❑ Un Deadlocking es algo incorrecto, se debe evitar esto. ❑ El metodo wait() permite decir a un hilo: No hay nada que yo pueda hacer por ahora, entonces colócame en un pool de espera y notifícame cuando algo pase y yo este involucrado. Básicamente un wait() significa: Mantenme en espera en el pool o agrégame en la lista de espera. ❑ El metodo notify() es usado para enviar una señal a una y solo a una de las threads que están esperando por el mismo objeto bloqueado. ❑ El metodo notify() no puede especificar cual thread que espera será notificada. ❑ El metodo notifyAll() trabaja igual que notify(), pero envía la señal a todos las threads que esperan sobre el objeto. ❑ Los tres métodos: wait(), notify() y notifyAll() deberán ser invocados dentro de un contexto synchronized. Una thread invoca a un wait() o notify() sobre una objeto particular, el thread deberá sostener el bloqueo sobre el objeto. Oscar Vásquez Flores (eoscarvf@gmail.com )