SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.

Slides:



Advertisements
Presentaciones similares
UNIVERSIDAD PRIVADA SAN PEDRO ESCUELA INGENIERIA CIVIL
Advertisements

CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Archivos de Texto. Introducción Los archivos son una secuencia de bits que se guarda en el disco duro. La ventaja de utilizar archivos es que los datos.
Curso de Java Capitulo 7: Continuación Poo Profesor:
Programación Interactiva Hilos
SCJP Sun Certified Programmer for Java 6
I.T.E.S.R.C. Romina Tamez Andrea Martínez Ma. De Lourdes Solís
PROGRAMACIÓN PARALELA Tema 5: Análisis de algoritmos paralelos
Administración de procesos y del procesador.
Daniel Morillo Jorge Boscán Gregory Carrasco
Introducción a Programación Concurrente
Informática II Prof. Dr. Gustavo Patiño MJ
Ejemplo: Creación y mutación de procesos
Tema 12: Programación multihilo
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA SEIS DESARROLLO, INNER CLASSES.
10. Hilos Definición y ejecución Thread y Runnable
Modificadores.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA CINCO CONSOLE.
Tema 6: Clases Antonio J. Sierra.
Ingeniero Anyelo Quintero
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
HILOS Y COMUNICACIÓN ENTRE PROCESOS
SCJP Sun Certified Programmer for Java 6
Un hilo es un único flujo de ejecución dentro de un proceso. Un proceso es un programa ejecutándose dentro de su propio espacio de direcciones. Los.
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
Conceptos generales: Concurrencia: Existencia simultánea de varios procesos en ejecución. IMPORTANTE: EXISTENCIA SIMULTÁNEA NO IMPLICA EJECUCIÓN SIMULTÁNEA.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA TRES ASIGNACION.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Unidad III Administración de procesos
Desarrollador Profesional de Juegos Programación III Unidad II Una clase thread para window.
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors Sincronización de Threads en Java Josep Joan.
Programación de Memoria Compartida
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA DOS ORIENTACION A OBJETOS.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA SIETE GENERICOS Y COLECCIONES.
Capítulo 9: THREADS Carlos Oñate Bravo. THREADS Start New Threads lRecognize Thread States and Transitions Use Object Locking to Avoid Concurrent Access.
Material de apoyo Unidad 4 Estructura de datos
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA CUATRO CONTROL DE FLUJOS, EXCEPCIONES Y ASERSIONES.
Monitores Mecanismo sincronización de nivel más alto que semáforos Construcción a nivel de lenguaje de programación que controla el acceso a datos compartidos.
Monitores Cabudare, noviembre de 2010 Universidad Fermín Toro
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Teoría de Sistemas Operativos Sincronización Procesos Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
Elementos básicos del lenguaje
TEMA 2. Programación Concurrente
Programación Orientada a Objetos
Informática III 2009 Ing. Estela D'Agostino 1 Programación secuencial vs programación concurrente Pascal, C, Fortran, Cobol Secuenciales único hilo de.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA SEIS DESARROLLO, INNER CLASSES.
INTRODUCCION A LA PROGRAMACION
EQUIPO 4 INTEGRANTES: ALVARADO LUNA AIDA ARACELI MENESES AGUILAR AXEL NESTOR CONTRERAS MONDRAGON ALAN HEMIR SANCHEZ MUÑIZ JOSE FRANCISCO.
Threads en Java  Threads: programas multitarea  Creación de threads  Ciclo de vida de un thread  Sincronización.
CRUCIGRAMA HORIZONTALES: VERTICALES:
Manual para crear un programa en NetBeans
Hilos y Multihilos Un thread (hilo, flujo de control del programa) representa un proceso individual ejecutándose en un sistema. A veces se les llama.
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
Desarrollador Profesional de Juegos Programación III Unidad II Trabajando con bloqueo de datos.
Hilos Java Profesor Elian Rojas Berrocal
Desarrollador Profesional de Juegos Programación III Unidad II introducción a Mutex Secciones críticas.
Historia de los sistemas operativos. Los Sistemas Operativos han sufrido una serie de cambios revolucionarios llamados generaciones. Hay cuatro generaciones:
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
This y static. This Normalmente, dentro del cuerpo de un método de un objeto se puede referir directamente a las variables miembros del objeto. Sin embargo,
Tema 1: Concurrencia con Java
Global Marketing © Chevron 2005 Rev. 1 Aislamiento de Energia Peligrosa (LOTO)
Transcripción de la presentación:

SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6

SCJP 6.0 SEMANA OCHO THREADS

ESTADOS DE UN HILO Y SUS TRANSICIONES

C ANDADOS DE OBJETOS Los hilos que llaman a métodos sincronizados de instancia solo se pueden bloquear entre ellos solo si están compartiendo el candado de algún objeto Los hilos que llaman al mismo método estático de alguna clase siempre se van a bloquear debido al candado Un método estático y un método de instancia sincronizados nunca podrán bloquearse Para los bloques de instancia se debe poner entre parentesis el objeto del cual se tomara el candado para la sincronizacion

M ÉTODOS RELACIONADOS CON EL CANDADO DE LOS OBJETOS ( LOCK )

RECUERDA… En una clase “ thread-safe ” los metodos que necesitan hacer cambios en las variables necesitan ser synchronized Para accesar a variables estaticas debera de ser a traves desde metodos estaticos synchronized Para accesar a variables no estaticas debera de ser a traves de metodos no estaticos synchronized

SYNCHRONIZED Ejemplo:

CLASES THREAD-SAFE Cuando una clase ha sido sincronizada para proteger los datos (usando las reglas anteriores o usando alternativas mas complicadas) decimos que es una clase “ thread-safe ”. Muchas clases en el API de Java usan la sincronizacion internamente, como por ejemplo StringBuffer y StringBuilder son clases identicas, la diferencia es que todos los metodos de la clase StringBuffer son synchronized Esto hace que la clase StringBuffer sea segura en un ambiente multi-hilos

CLASES THREAD-SAFE ¿La clase NameList puede ser usada con multiples hilos? Se puede decir que si, ya que la Lista names es privada, por lo tanto, la clase es segura tambien

CLASES THREAD-SAFE ¿Cuál es el problema? No checar correctamente el size() de names antes de remover algo

CLASES THREAD-SAFE El Thread t1 ejecuta names.size(), regresa 1 El Thread t1 ejecuta names.remove(0), regresa Ozymandias El Thread t2 ejecuta names.size(), regresa 0 El Thread t2 no llama a remove(0) La salida seria: Ozymandias null

CLASES THREAD-SAFE Como sabemos, la salida en un programa con hilos no puede ser garantizada y el orden de ejecucion en los hilos no siempre sera la misma, podemos tener algo asi: ¿Como hacemos que la clase sea una clase thread- safe ?

CLASES THREAD-SAFE Haciendo los metodos synchronized Una posible solucion seria:

CLASES THREAD-SAFE Poniendo cada metodo como sincronizado puede ser una opcion no muy buena, lo mejor seria poner la sincronizacion en un nivel mas alto: ponerlo dentro de un bloque o metodo que llame a otros metodos En este caso la sincronizacion original puede ser la mejor opcion (tener la sincronizacion del lado del objeto regresado por Collections.synchronizedList() )

E L ABRAZO DE LA MUERTE EN LOS HILOS El abrazo de la muerte (deadlock) ocurre cuando dos hilos son bloqueados, cada hilo espera al otro.

E L ABRAZO DE LA MUERTE EN LOS HILOS

Supongamos que el metodo read() es inicializado por un hilo, y el metodo write() es inicializado por otro. Si hay dos diferentes hilos que puedan leer y escribir independientemente, existe el riesgo que ocurra un abrazo de la muerte en la linea 8 o 16. El hilo reader tendra el objeto resourceA, el hilo writer tendra el objeto resourceB y ambos esperaran a que liberen el recurso. ¿Cómo solucionarian un deadlock en Hilos?

EL ABRAZO DE LA MUERTE EN LOS HILOS El ejemplo anterior es facil de reparar: Solo cambiamos el orden del candado para reader o writer, ya sea en la linea 16 y 17 u 8 y 9

E JERCICIO Intentar hacer un DeadLock(abrazo de la muerte)

I NTERACCIÓN ENTRE HILOS

W AIT, NOTIFY, NOTIFY A LL La clase Object tiene los siguientes 3 métodos: wait() notify() notifyAll() Estos métodos ayudan a comunicar a los hilos mediante su estado Ejemplo, un hilo envía correos, otro hilo recibe correos El hilo que recibe correos tiene que estar “ checando” para ver si hay un mail a procesar Usando wait() y notifyAll() se deja a un hilo en una “ sala de espera ”, hasta que otro hilo notifique que hay alguna razón para volver

W AIT, NOTIFY, NOTIFY A LL Recuerda: wait(), notify() y notifyAll() deben ser llamados dentro de un contexto sincronizado Un hilo no puede llamar a ninguno de estos métodos de un objeto a menos que tenga el candado de este objeto.

INTERACCION ENTRE HILOS El programa anterior tiene dos hilos: El hilo main de la clase ThreadA El hilo ThreadB que hara la suma de todos los numeros del 0 al 99 En la linea 4 se llama la metodo start() ThreadA continuara con la siguiente linea de codigo, esto significa que llegara a la linea 11 antes de que ThreadB termine el calculo.

E JERCICIO Probar el código anterior

METODO WAIT() Cuando un Thread invoca a este metodo sobre un recurso, libera el candado del mismo y pasa al estado de waiting (esperando). Una vez estando en este estado, el Thread permanecera ahí hasta que reciba una señal por parte del Thread que en ese momento tenga el candado del recurso poder continuar su ejecucion Existe una version sobrecargada del metodo, su sintaxis es wait(int milisegundos)

METODO WAIT() Si transcurrido este tiempo no ha recibido señal para salir del estado de espera, automaticamente pasa al estado de “preparado” (runnable) Estos metodos pueden lanzar una excepcion de tipo InterruptedException

METODO NOTIFY() Al invocarlo se envia una señal al Thread que hizo la llamada a wait() sobre el recurso. A partir de este momento, el Thread podra continuar su ejecucion pasando al estado de preparado (runnable)

METODO NOTIFYALL() Este método se utiliza cuando varios hilos están esperando un recurso En cuanto notifica a todos los hilos, estos hilos empiezan a competir por cerrar el candado y así ejecutarse

E JERCICIO Probar el código de la clase Reader